我有一个应用程序,它读取数据文件并将其转换为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设置为以完全信任的方式运行
答案 0 :(得分:4)
看起来你必须从UI线程调用SaveFileDialog.ShowDialog 尝试:
var getSaveFileTask = Task.Factory.StartNew<string>(() => GetSaveFile(), CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());