我有一个 Winform 应用程序。单击 button2 后,应用程序将开始下载大量图像,其 url 存储在 ThousandsOfImageURLs 列表中。该应用程序适用于前 40 个图像下载。但是之后,函数 ParallelRunBrowser 中的 Task.Factory.StartNew 无法启动 RunBrowserThread。我可以看到每 10 秒 Task.Factory.StartNew 被击中,但在下载大约 40 张图像后,DownLoadImages 类的 RunBrowserThread 内的断点无法再被击中。我没有看到以这种方式在几个小时内抛出任何异常。
可能的问题是什么?
谢谢,
private void button2_Click(object sender, EventArgs e)
{
var sta = new StaTaskScheduler(numberOfThreads: 4);
var doImages = new ThreadLocal<DownLoadImages>(() => new DownLoadImages());
foreach (string url in ThousandsOfImageURLs)
ParallelRunBrowser(strSiteRoot + url, sta, doImages);
}
}
}
private void ParallelRunBrowser(string url, StaTaskScheduler sta, ThreadLocal<DownLoadImages> doImages)
{
Thread.Sleep(10000);
Task.Factory.StartNew(() =>
{
doImages.Value.RunBrowserThread(new Uri(url));
},
CancellationToken.None,
TaskCreationOptions.None,
sta);
}
class DownLoadImages
{
public void RunBrowserThread(Uri url)
{
var br = new WebBrowser();
br.DocumentCompleted += Browser_DocumentCompleted;
br.Navigate(url);
Application.Run();
}
void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var br = sender as WebBrowser;
if (br.Url == e.Url)
{
FinishDownLoadHere(sender, e);
Application.ExitThread();
((WebBrowser)sender).Dispose();
GC.Collect();
}
}
}