私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);
}
}