private void button1_Click(object sender, EventArgs e)
{
//控制主线程(单线程操作)
MessageBox.Show("开始做菜", "友情提示");
Thread.Sleep(3000);//主线程休眠
MessageBox.Show("素菜做好了","友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了", "友情提示");
}
private void button2_Click(object sender, EventArgs e)
{
//多线程操作,重新创建一个线程用来做菜
Thread td = new Thread(()=> {
MessageBox.Show("开始做菜", "友情提示");
Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
MessageBox.Show("素菜做好了", "友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了", "友情提示");
});
td.Start();//开启线程
}
private void button3_Click(object sender, EventArgs e)
{
//同时开始多个线程并对线程进行管理
Task.Run(() =>
{
MessageBox.Show("开始做菜", "友情提示");
Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
MessageBox.Show("素菜做好了", "友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了", "友情提示");
});
}
private void button4_Click(object sender, EventArgs e)
{
//多线程同时进行互不干扰
Task.Run(() =>
{
MessageBox.Show("开始做菜", "友情提示");
});
Task.Run(() =>
{
Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
MessageBox.Show("素菜做好了", "友情提示");
});
Task.Run(() =>
{
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了", "友情提示");
});
}
private void button5_Click(object sender, EventArgs e)
{
//这时主线程与增设线程同时进行互不干扰,所以并不会看到先运行完task线程内的代码再执行MessageBox.Show("菜都做好了,大家块来吃饭!","提示");
Task.Run(() =>
{
MessageBox.Show("开始做菜", "友情提示");
Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
MessageBox.Show("素菜做好了", "友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了", "友情提示");
});
MessageBox.Show("菜都做好了,大家块来吃饭!","提示");
}
private async void button6_Click(object sender, EventArgs e)
{
//添加关键词await线程等待,主线程等待新增线程完成后在执行主线程代码,同时方法名需要添加关键词async
await Task.Run(() =>
{
MessageBox.Show("开始做菜", "友情提示");
Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
MessageBox.Show("素菜做好了", "友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了", "友情提示");
});
MessageBox.Show("菜都做好了,大家块来吃饭!", "提示");
}
private void button7_Click(object sender, EventArgs e)
{
List<Task> ts = new List<Task>();
MessageBox.Show("开始做菜", "友情提示");
//多线程同时进行互不干扰
ts.Add(Task.Run(() =>
{
Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
MessageBox.Show("素菜做好了", "友情提示");
}));
ts.Add(Task.Run(() =>
{
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了", "友情提示");
}));
//等待集合中新增线程完成.在输出MessageBox.Show("菜都做好了,大家块来吃饭!", "提示")
Task.WhenAll(ts).ContinueWith(t => {
MessageBox.Show("菜都做好了,大家块来吃饭!", "提示");
});
}