解决跨线程调用错误提示

出面这种错误主要是因为我们在一个不是创建此控件的线程上,对此控件进行操作所引起的,现在有解决方法两种,大家自已看, 

第一:

private delegate void change(string text); //定义委托,使线程方便调用此委托方
        private void changeText()
        {
            setText("正在侦听");
        }
        private void setText(string text)
        {
            if (label1.InvokeRequired)  //如果控件的 Handle 是在与调用线程不同的线程上创建的(说明您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false。(即创建此控件和操作此操件是否不在一个线程上)


            {
                change chg = new change(setText);
                this.Invoke(chg, new object[] { text }); //在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托
            }
            else
            {
                label1.Text = text;
            }
        }

然后再新建一个线程

 Thread cha = new Thread(new ThreadStart(changeText));
            cha.Start();

 

第二种

 

 private void change()
        {
            this.label1.Text = "正在侦听";
        }
        private void threadchange()   //通过委托处理,MSDN上又很详细用法的说明
        {
            MethodInvoker In = new MethodInvoker(change);
            this.BeginInvoke(In);
        }
        

创建新线程

 Thread cha = new Thread(new ThreadStart(threadchange));
            cha.Start();
      

 

//其实这种方法原理是一样的,都是重新定义一个委托,然后在定义一个新线程对些委托方法进行调用,我做时把这个线程也放到了另一个线程内.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值