在完全信任的XBAP中使用TPL时,为什么我的SaveFileDialog不会出现?

时间:2012-02-27 13:42:33

标签: c# task-parallel-library xbap

我有一个应用程序,它读取数据文件并将其转换为CSV文件。理想情况下,当用户选择保存.csv文件的位置时,我希望在后台处理读取,但是当SaveFileDialog从另一个调用.ShowDialog()时,void ReadFile(string inputFile) { var readFileTask = Task.Factory.StartNew<string>(() => ReadFile(inputFile)); var getSaveFileTask = Task.Factory.StartNew<string>(() => GetSaveFile()); // Wait until both tasks are finished Task.WaitAll(new Task[] { readFileTask , getSaveFileTask }); var data = readFileTask.Result; var saveLocation = getSaveFileTask.Result; // Save data as CSV file Task.Factory.StartNew(() => WriteCsvFile(saveLocation)); } private string GetSaveFile() { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "Csv Files|*.csv"; sfd.Title = "Select location to save file to"; // This get hit but dialog never appears when called from another thread sfd.ShowDialog(); return sfd.FileName; } 不显示螺纹

{{1}}

它在常规WPF应用程序中工作正常,所以我假设它与XBAP有关。 XBAP设置为以完全信任的方式运行

1 个答案:

答案 0 :(得分:4)

看起来你必须从UI线程调用SaveFileDialog.ShowDialog 尝试:

var getSaveFileTask = Task.Factory.StartNew<string>(() => GetSaveFile(), CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());