线程与可视化单元的通讯

  最近用C#做了一个小程序,里面用到了线程。在运行期间,线程需要对可视化单元进行处理。按照已往使用方法,便在线程上直接添加,以更改该单元的值,如:richTextBox.Appendtext="...."。但结果程序提示异常:不是创建控件“richTextBox”的线程访问它。不知道如何处理。

  后来查阅资料发现:在.NET中每个线程有它自己的进程空间,一个线程里的对象的地址作为另一个线程的地址是没有用的。因此,试图访问另一个进程空间里的对象会引起一个不能控制的异常,从而导致程序崩溃。

  解决方法:

  Methodinvoker委派的BeginInvoke方法,用于一个进程空间的线程里调用另一个进程里的方法。这些方法对于线程来说是安全的,在多线程的环境下也可以使用。

  部分代码如下:

  private void UpdateRichTextBox()
        {
            richTextBox1.AppendText("...");
        }

 

   private void button1_Click(object sender, EventArgs e)
        {

    thread = new Thread(new ThreadStart(recieve));
                thread.Start();

        }

        private void recieve()
        {

               MethodInvoker mi = new MethodInvoker(this.UpdateRichTextBox);
               this.BeginInvoke(mi);

        }

阅读更多
个人分类: C#
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭