温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

线程间操作无效: 从不是创建控件“t1”的线程访问它

发布时间:2020-07-02 09:00:04 来源:网络 阅读:497 作者:eryongyan 栏目:编程语言

线程间操作无效: 从不是创建控件“t1”的线程访问它


开发时 经常会遇到上面的问题,原因常常是在新Thread中给窗体中的控件赋值。

为了解决此问题,我们可以调用this.BeginInvoke(Delegate method);方法,this.表示窗体,当然可以用想要调用 的控件,比如Label,Button。

此方法的参数要求为委托参数,我们可以使用

this.BeginInvoke(MethodInvoker)delegate(){//方法体})

来简写,

private void button1_Click(object sender, EventArgs e)

       {

           Thread t = new Thread(new ParameterizedThreadStart(test1));

           t.Start(t1);

       }

       void test1(object  label)

       {

           this.BeginInvoke((MethodInvoker)delegate()

           {

               (label as Label).Text = Thread.CurrentThread.ManagedThreadId.ToString();

           });

//直接给控件赋值会引发异常

   // (label as Label).Text = Thread.CurrentThread.ManagedThreadId.ToString();

       }

当然这里也可以调用Invoke方法,跟BeginInvoke的区别只是同步跟异步的区别而已。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI