WebBrowser 多线程问题,寻求解答!(已经搞清楚!)
<div id="cnblogs_post_body"><div class="cnblogs_code">using System;using System.Threading;using System.Windows.Forms;namespace WebBrowserTest{ public partial class MainForm : Form { public MainForm() { InitializeComponent(); } public static ChildForm childForm; private void MainForm_Load(object sender, EventArgs e) { this.Text = string.Format("线程ID:{0}", Thread.CurrentThread.ManagedThreadId); } private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread(new ThreadStart(this.CreateForm)); thread.SetApartmentState(ApartmentState.STA); thread.IsBackground = true; thread.Start(); } private void CreateForm() { MainForm.childForm = new ChildForm(); MainForm.childForm.webBrowser.Navigate("http://tieba.baidu.com/"); //这里不是UI线程,为什么也能导航呢? MainForm.childForm.ShowDialog(); } private void button2_Click(object sender, EventArgs e) { if (MainForm.childForm != null && MainForm.childForm.IsHandleCreated) { //如果不调用childForm窗口的Invoke方法修改标题,就报异常! //线程间操作无效: 从不是创建控件&ldquo;ChildForm&rdquo;的线程访问它。 MainForm.childForm.Invoke(new MethodInvoker(delegate { MainForm.childForm.Text = string.Format("线程ID:{0}", Thread.CurrentThread.ManagedThreadId); })); //为什么这里就能正常导航页面呢? //难道WebBrowser控件,始终都在UI线程运行? //即使创建它的线程,不是UI线程? MainForm.childForm.webBrowser.Navigate("http://www.baidu.com/"); } } }}
页:
[1]