C#新线程中操作主线程的控件 ,解…

    xiaoxiao2021-03-25  204

     

    写一个串口,这问题从昨晚搞到今晚,网络上面一堆的解决方法都不能用,就因为使用的VisualStudio是2015版本,微软那边自顾自的修改了结构却没有提示要怎么提升到新版本的函数用法,以至于许多经验都无法直接利用,必须一步步摸索。

     

     

    如果说,使用新的线程,直接操作控件,例如修改文字或者调用文字,在新线程中循环修改数值等等

     

    例如:

     

    void I()

    {

     Thread Thd_Send = new Thread(new ThreadStart(SendData));//新建一个线程以发送数据               Thd_Send.Start();

    }

    void SendData()

    {

        serialPort1.WriteLine(tbSend.Text);//读取textbox中文字并发送数据

    }

     

    如果执行函数 I() 必然会出错并提示

     

    “调用线程无法访问此对象,因为另一个线程拥有该对象”

     

    因为如果直接调用很可能就和主线程造成资源抢占并导致死锁,因此10年的编译器到现在都不让创建控件的线程以外的线程直接操作UI控件了,所以我们必须要以委托的形式来执行该函数

     

     

    因此,我们需要修改函数如下

     private void SendData()         {             this.Dispatcher.Invoke(new Action(() => {

    //这边开始就是委托的内容                 serialPort1.WriteLine(tbSend.Text);//tbSend是控件的名称             }));                         Thread.EndThreadAffinity();         }

     

     这样就不会出错了

     

     

    最后表达下我的心情:  微软全家爆炸!

    转载请注明原文地址: https://ju.6miu.com/read-477.html

    最新回复(0)