C#:非常奇怪的多线程WebBrowser事件行为

时间:2016-02-25 12:57:54

标签: c# multithreading webbrowser-control

这是一些简单的C#代码:

    private void MainFrm_Load(object sender, EventArgs e)
    {
        webBrowser.ProgressChanged += WebBrowser_ProgressChanged;
        webBrowser.Navigate("https://www.google.com/");
    }

    private void WebBrowser_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
    {
        MessageBox.Show(String.Format("WebBrowser progress changed, TID = {0}", System.Threading.Thread.CurrentThread.ManagedThreadId));
    }

其中MainFrm是一个简单的System.Windows.Forms,webBrowser是MainFrm中添加的WebBrowser控件(来自设计器工具箱)。

我希望这段代码能够:

  • 显示多个mbox @一次,并报告不同的 TID(在单独的线程中执行ProgressChanged事件)
  • 显示一个mbox @ a time ,并报告相同的 TID(在单个帖子中执行ProgressChanged事件)

我所看到的是多个mbox @一次w /同一报告的TID

此TID也是MainFrm执行的线程的TID!

我在这里遗漏了什么导致这种行为在我看来非常违反直觉:在我看来它不应该发生,因为这意味着单个线程在两个地方执行@一次(?)。这怎么可能?

由于我的应用中存在错误,我实际上已经发现了这一点。该错误是我依赖事件将在相同的线程上执行的事实,换句话说,它不可能同时执行两次

谢谢,

科尔内留。

0 个答案:

没有答案