线程与可视化单元的通讯

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

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值