关闭

线程与可视化单元的通讯

标签: thread多线程buttonobject.net通讯
958人阅读 评论(0) 收藏 举报
分类:

  最近用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);

        }

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:48592次
    • 积分:557
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:6篇
    • 译文:0篇
    • 评论:10条
    文章分类
    最新评论