Thread多线程开发
private void button2_Click(object sender,EventArgs e)
{
// Thread里面传入方法或者委托
Thread t = new Thread(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
});
t.Start();
}
Task多线程
private void button2_Click(object sender,EventArgs e)
{
Task.Run(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
});
}
await异步线程
等待线程做完后再执行接下来的步骤,但是ui线程不受影响
private async void button2_Click(object sender,EventArgs e)
{
await Task.Run(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
});
MessageBox.Show("菜都做好了,大家快来吃饭!","提示");
}
await异步线程不能同步进行
执行的时候还是一步步来走的
private void button2_Click(object sender,EventArgs e)
{
Task.Run(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
});
Task.Run(()=>
{
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
});
MessageBox.Show("菜都做好了,大家快来吃饭!","提示");
}
解决方法
private void button2_Click(object sender,EventArgs e)
{
List<task> ts = new List<Task>();
ts.Add(Task.Run(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
}));
ts.Add(Task.Run(()=>
{
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
}));
//当list里所有线程都结束时就会执行接下来的步骤
Task.WhenAll(ts).ContinueWith(t =>
{
MessageBox.Show("菜都做好了,大家快来吃饭!","提示");
});
}