C#:非常奇怪的多线程WebBrowser事件行为
下面是一些简单的C代码: 其中MainFrm是一个简单的System.Windows.Forms,webBrowser是在MainFrm中添加的一个webBrowser控件(来自设计器工具箱) 我希望此代码可以:C#:非常奇怪的多线程WebBrowser事件行为,c#,multithreading,webbrowser-control,C#,Multithreading,Webbrowser Control,下面是一些简单的C代码: 其中MainFrm是一个简单的System.Windows.Forms,webBrowser是在MainFrm中添加的一个webBrowser控件(来自设计器工具箱) 我希望此代码可以: 一次显示多个MBOX,报告不同的TID(ProgressChanged事件在单独的线程中执行) 每次显示一个mbox,报告相同的TID(ProgressChanged事件在单个线程中执行) 相反,我看到的是一次有多个MBOX,报告的是同一个TID 顺便说一下,此TID也是线程Mai
- 一次显示多个MBOX,报告不同的TID(ProgressChanged事件在单独的线程中执行)
- 每次显示一个mbox,报告相同的TID(ProgressChanged事件在单个线程中执行)
Corneliu。这里没有多线程,它都发生在主UI线程上。您看到多个消息框是因为
MessageBox.Show
在主线程上启动了一个新的嵌套消息循环。然后在同一线程上重新输入WebBrowser\u ProgressChanged
(递归,如果愿意的话)。检查VS调试器中的调用堆栈并查看。谢谢,这很有意义
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));
}