新线程永不完成等待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(); 
} 
+2

[WebBrowser控件在新线程中可能的重复](http://*.com/questions/4269800/webbrowser-control-in-a-new-thread) – Blorgbeard 2015-02-11 03:25:21

看着你的代码,我看到一个问题。您已在Navigate()调用后注册到DocumentCompleted事件。所以从理论上讲,在注册处理程序之前,事件可能已经被解雇。 尝试交换两行,看看你是否解决了你的问题。 我相信如果图像已被检索并被缓存,情况就会如此。

+0

谢谢。我感谢您的帮助。这并没有解决问题。 – Sharma 2015-02-12 03:02:32

+0

所以你说这个问题可以针对特定图像进行复制,对吗?如果是这样,那么当您只为这些图像中的一个调用Generate时,问题会重新解决吗? – Artak 2015-02-12 03:43:48

+0

我对这个问题进行了一些研究,似乎我有一些内存和缓存问题。我得到了现在成功工作的代码。谢谢。 – Sharma 2015-02-27 12:29:48