我刚开始接触C#的线程任务。我希望每当我点击按钮时,我都会添加一个任务,然后等待所有任务完成后再继续下一步。
我的代码如下:
List<Task> SingleTaskList = new List<Task>();
private void Add_Click(object sender, RoutedEventArgs e)
{
Task t = Task.Factory.StartNew(() => { Dosomething();});
SingleTaskList.Add(Task.Factory.StartNew(() => { Dosomething(); }));
Task.Factory.ContinueWhenAll(SingleTaskList.ToArray(), tArray =>
{
Dispatcher.Invoke(() =>
{
//Update the UI
});
});
}
但我发现,当任何一项任务完成后,就会采取下一步行动。
我应该如何修改此代码?
你可以像这样使用Task.WhenAll:
await Task.WhenAll(SingleTaskList.ToArray());
Dispatcher.Invoke(() =>
{
//Update the UI
});
仅供参考:为了在那里使用wait,您的方法需要标记为async,或者您需要用上面的语句调度一个新的async任务。
您的代码有很多问题,由于它看起来根本崩溃了,我只回答您的实际问题:如何等待多个任务,然后在UI线程上做一些事情。
您想要使用await
和Task.WhenAll()
,因此需要将函数标记为async
。你想要这样的东西:
private async void Add_Click(object sender, RoutedEventArgs e)
{
// fill SingleTaskList with whatever
await Task.WhenAll(SingleTaskList);
// update your UI here
// you're back on the GUI thread so no need for Dispatcher.Invoke
}