У меня есть приложение, которое читает файл данных и преобразует его в файл 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;
}
Он отлично работает в обычном приложении WPF, поэтому я предполагаю, что это как-то связано с тем, что это XBAP. XBAP настроен для работы с полным доверием