我有一个Task
我正在启动并希望在 WPF 应用程序中等待完成的程序。在这个任务中,我在调度程序上调用一个Action
。
如果我使用Task.Wait()
它似乎挂起,好像该方法从未完成。此外,Dispatcher.Invoke 中的断点永远不会被命中。
如果我使用Task.RunSyncronously()
它,它似乎工作正常,并且 Dispatcher 内的断点被命中。
为什么有区别?
下面的代码示例:
public void ExampleMethod()
{
// When doing the following:
var task = new Task(LoadStuff);
// This never returns:
task.Start();
task.Wait();
// This version, however, does:
task.RunSyncronously();
}
private void LoadStuff()
{
ObservableCollection<StuffObj> stuff = Stuff.Load(arg1, true);
DispatchHelper.RunOnDispatcher(() =>
{
...
});
}
public static class DispatchHelper
{
public static void RunOnDispatcher(Action action)
{
Application.Current.Dispatcher.Invoke(action);
}
}