代码之家  ›  专栏  ›  技术社区  ›  Berryl

UI任务未按预期工作

  •  0
  • Berryl  · 技术社区  · 16 年前

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

    我做错什么了?

    干杯,
    贝里尔

    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 回复  |  直到 15 年前
        1
  •  1
  •   Ian Griffiths    15 年前

    我想是这样的:

    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());
    
        2
  •  0
  •   Anon.    16 年前

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

    您应该在提取的回调中调用延续,而不是在实际启动请求的相同方法中。