新线程永不完成等待WebBrowser
问题描述:
在创建jpg图像时,此代码使用线程。但是,Thread.Join()
有时会挂在创建特定图像上。我研究过,似乎我应该使用BeginInvoke()
来代替。我怎么能重写下面的代码使用Thread.Join()
到BeginInvoke()
?新线程永不完成等待WebBrowser
public Bitmap Generate()
{
var m_thread = new Thread(_Generate);
m_thread.SetApartmentState(ApartmentState.STA);
m_thread.Start();
m_thread.Join();
return m_Bitmap;
}
private void _Generate()
{
var browser = new WebBrowser {ScrollBarsEnabled = false };
browser.ScriptErrorsSuppressed = true;
browser.Navigate(m_Url);
browser.DocumentCompleted += WebBrowser_DocumentCompleted;
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
browser.Dispose();
}
答
看着你的代码,我看到一个问题。您已在Navigate()调用后注册到DocumentCompleted事件。所以从理论上讲,在注册处理程序之前,事件可能已经被解雇。 尝试交换两行,看看你是否解决了你的问题。 我相信如果图像已被检索并被缓存,情况就会如此。
[WebBrowser控件在新线程中可能的重复](http://*.com/questions/4269800/webbrowser-control-in-a-new-thread) – Blorgbeard 2015-02-11 03:25:21