任务没有达到预期的效果

时间:2010-06-30 23:48:12

标签: wpf multithreading task

在下面的代码中,我希望在获取某些数据之前显示状态消息,并且在数据提取完成之前不显示填充了该数据的对话框。但是在数据到达之前会显示对话框。

我做错了什么?

干杯,
Berryl

ProjectSelectionViewModel vm = null;
SetStatus("Fetching data...");
var task = Task.Factory.StartNew(() =>
    {
        vm = presentationFactory.GetProjectSelectionViewModel();
    }
                            );
task.ContinueWith(t => SetStatus("Finished!!!"), TaskScheduler.FromCurrentSynchronizationContext());
var userAction = uiService.ShowDialog(Strings.ViewKey_ProjectPicker, vm);
// etc.

2 个答案:

答案 0 :(得分:1)

我想是这样的事情:

ProjectSelectionViewModel vm = null;
SetStatus("Fetching data...");
var task = Task.Factory.StartNew(() =>
{
    vm = presentationFactory.GetProjectSelectionViewModel();
}
                            );
task.ContinueWith(t =>
    {
        SetStatus("Finished!!!");
        var userAction = uiService.ShowDialog(Strings.ViewKey_ProjectPicker, vm);
    },
    TaskScheduler.FromCurrentSynchronizationContext());

答案 1 :(得分:0)

您的代码以异步方式执行提取,但继续显示完成对话框,而不等待异步调用完成。

您应该从fetch中调用回调中的continuation,而不是实际启动请求的方法。