在创建jpg图像时,此代码使用线程。但是,Thread.Join()
有时会在创建特定图像时挂起。我已经研究过,似乎我应该使用BeginInvoke()
代替。如何使用Thread.Join()
到BeginInvoke()
重写以下代码?
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();
}
答案 0 :(得分:1)
查看您的代码我发现了一个问题。您在Navigate()调用后注册了DocumentCompleted事件。因此理论上,在您注册处理程序之前,事件可能已被触发。 尝试交换这两行,看看你是否修复了问题。 我相信,如果图像已经被检索并被缓存,那就是这种情况。