【问题标题】:Control 'webBrowser1' accessed from a thread other than the thread it was created on控件“webBrowser1”从创建它的线程以外的线程访问
【发布时间】:2014-01-26 12:49:34
【问题描述】:

我有 2 个表格 在表格 1 中只有一个按钮 在表格 2 中只有一个 Web 浏览器。 我想在webbrowser.DocumentText 中设置短信响应流

跨线程操作无效:控件“webBrowser1”访问自 与创建它的线程不同的线程。

    public partial class Form1 : Form
    {
        CookieContainer cookies = new CookieContainer();
        Form2 form2 = new Form2();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {         
            Thread th = new Thread(Dowork);
            th.SetApartmentState(ApartmentState.STA);
            th.Start();
        }

        void Dowork()
        {
            try
            {
              Encoding charset = Encoding.GetEncoding("utf-8");
              HttpWebRequest SMSRequset = (HttpWebRequest)WebRequest.Create("http://www.iam.ma/_layouts/SharepointFreeSms/EnvoyerSms.aspx");
                SMSRequset.Method = "GET";
                SMSRequset.CookieContainer = cookies;
                HttpWebResponse SMSResponse = (HttpWebResponse)SMSRequset.GetResponse();
                System.IO.StreamReader reader2 = new System.IO.StreamReader(SMSResponse.GetResponseStream(), charset);

                form2.Show();
                form2.Invoke((MethodInvoker)delegate
                {
                    form2.webBrowser1.DocumentText = reader2.ReadToEnd();
                });
            }
            catch (Exception EX)

                {
                    MessageBox.Show(EX.Message);

                }
        }
}

我该怎么办?

错误在这里

form2.webBrowser1.DocumentText = reader2.ReadToEnd();

【问题讨论】:

标签: c# multithreading winforms


【解决方案1】:

更改所有要通过调用执行的代码:

form2.Show();
   Encoding charset = Encoding.GetEncoding("utf-8");
   HttpWebRequest SMSRequset =  (HttpWebRequest)WebRequest.Create("http://www.iam.ma/_layouts/SharepointFreeSms/EnvoyerSms.aspx");  
   SMSRequset.Method = "GET";
   SMSRequset.CookieContainer = cookies;
   HttpWebResponse SMSResponse = (HttpWebResponse)SMSRequset.GetResponse();
   System.IO.StreamReader reader2 = new System.IO.StreamReader(SMSResponse.GetResponseStream(), charset);
form2.webBrowser1.Invoke((MethodInvoker)delegate
{
   form2.webBrowser1.DocumentText = reader2.ReadToEnd();
});

【讨论】:

  • 请不要回答重复的问题。
  • 跨线程操作无效:控件“webBrowser1”从创建它的线程以外的线程访问。同样的错误
  • 哪一行?你意识到没有人可以看到你的屏幕。 ;?
  • 抱歉我忘了 :))) 这行 form2.webBrowser1.DocumentText = reader2.ReadToEnd();
  • 是那个 orig 错误的地方吗?好的,尝试使用 webBrowser1 来调用...看起来其他人也在告诉你这样做。我将编辑答案。
猜你喜欢
  • 2014-09-19
  • 1970-01-01
  • 2011-01-15
  • 2016-05-21
  • 2016-06-11
  • 2015-05-14
  • 1970-01-01
相关资源
最近更新 更多