Wpf ui任务未按预期运行

Wpf ui任务未按预期运行,wpf,multithreading,task,Wpf,Multithreading,Task,在下面的代码中,我希望在获取之前的一些数据时显示一条状态消息,并且在数据获取完成之前不显示填充了该数据的对话框。但是,对话框在数据到达之前显示 我做错了什么 干杯, 贝里尔 代码异步执行fetch,但继续显示完成对话框,而不等待异步调用完成 您应该在从fetch调用的回调中调用continuation,而不是在实际启动请求的同一个方法中调用continuation。我认为是这样的: ProjectSelectionViewModel vm = null; SetStatus("Fetching

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

我做错了什么

干杯,
贝里尔


代码异步执行fetch,但继续显示完成对话框,而不等待异步调用完成


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

我认为是这样的:

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());
你的意思是在继续中(类似于task.ContinueWith(t=>\u onFetchFinished(vm),…)或在创建任务中(类似于task.Factory.StartNew(()=>\u fetch(),()=>\u onFetchFinished(vm))。你能划掉一些快速而肮脏的代码吗?
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());