我在使用WebClient
多线程应用程序(DownloadFileCompleted
和DownloadProgressChanged
)中的事件时遇到问题。我有创建计时器的主要方法。DownloaderForm
每隔一段时间,我将创建一个线程,如果满足某个条件,它将弹出另一个窗体 ( )。
void TimerElapsed(object sender, System.Timers.ElapsedEventArgs e) {
var thread = new Thread(SilentCheckingUpdate) {
Name = "Update Checker",
};
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
SilentChekingUpdate 方法检查更新。
bool found = _updater.UpdateRequired(currentConfig, out latestVersion);
if (found)
{
_updater.ShowUpdateUI(latestVersion);
}
如果找到,它会从 win forms 类 Updater 调用另一个方法,该方法从 Downloader 调用 StartDownload。
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 的事件不再被触发。
你能帮助我吗?
谢谢!