KOFIP 发表于 2013-1-2 22:47:13

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方法修改标题,就报异常!                //线程间操作无效: 从不是创建控件“ChildForm”的线程访问它。                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]
查看完整版本: WebBrowser 多线程问题,寻求解答!(已经搞清楚!)