У меня есть приложение для форм Windows, с кнопкой - на обработчике событий кнопки, мне нужно загрузить файл с помощью SaveFileDialog. Но мне нужно сделать это асинхронно в отдельном потоке.Как использовать SaveFileDialog асинхронно?
До сих пор я придумал этот код, но я не знаю, если мой подход является ошибочным или OK:
private void btnDownload_Click(object sender, EventArgs e)
{
ThreadStart tStart = new ThreadStart(DoWorkDownload);
Thread thread = new Thread(tStart);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
private void DoWorkDownload()
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.InitialDirectory = "C:\\";
sfd.Filter = "All files (*.*)|*.*";
sfd.FilterIndex = 1;
sfd.RestoreDirectory = true;
if (sfd.ShowDialog() == DialogResult.OK)
{
//do file saving here
}
}
}
Моя логика в приведенном выше коде: на кнопку мыши создать новую тему , передать метод DoWorkDownload() в поток, а затем запустить его; в этот момент предполагается ввести метод работы, однако при отладке он никогда не входит в DoWorkDownload().
Кто-нибудь знает, что мне не хватает?
спасибо.
Основная тема приложения также была запущена в режиме STA? –
Bogdan_Ch, это верно: мой код выше был написан в Form1.cs, а проект также включает Program.cs, который имеет [STAThread] для Main. Должен ли я использовать STA в моей декларации? –