新线程永远不会在Web浏览器上等待

时间:2015-02-11 02:54:25

标签: c# multithreading

在创建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();
}

1 个答案:

答案 0 :(得分:1)

查看您的代码我发现了一个问题。您在Navigate()调用后注册了DocumentCompleted事件。因此理论上,在您注册处理程序之前,事件可能已被触发。 尝试交换这两行,看看你是否修复了问题。 我相信,如果图像已经被检索并被缓存,那就是这种情况。