我在多線程應用程序(DownloadFileCompleted
和DownloadProgressChanged
)中使用WebClient
事件時出現問題。 我有我創建一個計時器的主要方法。每隔一段時間,如果滿足條件,我將創建一個線程來彈出另一個窗體(DownloaderForm
)。DownloadFIleCompleted和DownloadProgressChanged未在多線程中贏得表單應用程序
void TimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
{
var thread = new Thread(SilentCheckingUpdate)
{
Name = "Update Checker",
};
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
用於更新的方法SilentChekingUpdate檢查。
如果找到,它會從win窗體類Updater中調用另一種方法,該方法將StartDownload從Downloader中調用。
public void ShowUpdateUI(Item currentItem)
{
var downloader = new Downloader();
downloader.StartDownload();
}
下載器包含WebBrowserControl。我做了一個調用DownloadFileAsync的方法。
public void StartDownload()
{
// start async download
var client = new WebClient();
client.DownloadProgressChanged += ClientDownloadProgressChanged;
client.DownloadFileCompleted += ClientDownloadFileCompleted;
var url = new Uri(_item.DownloadLink);
client.DownloadFileAsync(url, _tempName);
}
如果我從表單線程調用StartDownload函數,一切正常,事件被觸發。當我使用TimerElapsed的StartDownload工作線程時,DownloadFileAsync的事件不再被觸發。
你能幫我嗎?
謝謝!
這是很難說什麼可能是錯誤的,當你不提供代碼,顯示問題。你說你從TimerElapsed的工作線程中遇到了StartDownload的問題,但是你沒有提供從TimerElapsed中創建的線程調用StartDownload的代碼 –
我編輯了這篇文章的更多信息謝謝你的時間,Peter! –