首页 > 编程语言 >C# 直接在子线程中对窗体上的控件操作是会出现异常

C# 直接在子线程中对窗体上的控件操作是会出现异常

时间:2023-04-01 17:26:37浏览次数:39  
标签:mtestType 控件 C# 在子 EMT CAMERA 线程 TEST TYPE

https://www.bbsmax.com/A/MAzA8klpd9/

 

Form1里

       private delegate void DispMSGDelegate(int index, string MSG);


        public void DispMsg(int iIndex, string strMsg)
        {
            if (this.richTextBox1.InvokeRequired == false)                      //如果调用该函数的线程和控件lstMain位于同一个线程内
            {
                //直接将内容添加到窗体的控件上
                if (0 == iIndex) {
                        this.showResultButtons(true);
                        this.setTestMenus(false);
                }
            }
            else                                                        //如果调用该函数的线程和控件lstMain不在同一个线程
            {
                //通过使用Invoke的方法,让子线程告诉窗体线程来完成相应的控件操作
                DispMSGDelegate DMSGD = new DispMSGDelegate(DispMsg);

                //使用控件lstMain的Invoke方法执行DMSGD代理(其类型是DispMSGDelegate)
                this.richTextBox1.Invoke(DMSGD, iIndex, strMsg);

            }
        }

 

其他线程或者回调里调用

                    if (0 == rtn)
                    {
                        if (mtestType == EMT_TEST_TYPE.CAMERA_ADUIO_START ||
                           mtestType == EMT_TEST_TYPE.CAMERA_ADUIO_STOP ||
                           mtestType == EMT_TEST_TYPE.CAMERA_PLAY ||
                           mtestType == EMT_TEST_TYPE.CAMERA_MOVE_HORIZONTAL ||
                           mtestType == EMT_TEST_TYPE.CAMERA_MOVE_UPDOWN ||
                           mtestType == EMT_TEST_TYPE.CAMERA_MOVE_STOP ||
                           mtestType == EMT_TEST_TYPE.CAMERA_KEY ||
                           mtestType == EMT_TEST_TYPE.CAMERA_INFRAREDLED ||
                           mtestType == EMT_TEST_TYPE.CAMERA_IRCUT)
                        {
                            //Program.f1.addLog("setShowRB1:");
                            Program.f1.DispMsg(0, "");
                        }
                    }

 

标签:mtestType,控件,C#,在子,EMT,CAMERA,线程,TEST,TYPE
From: https://www.cnblogs.com/cnchengv/p/17278936.html

相关文章

  • 面试笔记-Docker(Ⅱ)
    上篇文章已经成功build了image并且创建了container运行成功,我们现在进行接下来的工作目录挂载使用Docker运行后,我们改了项目代码不会立刻生效,需要重新build和run,很是麻烦。容器里面产生的数据,例如log文件,数据库备份文件,容器删除后就丢失了。......
  • mycat集群
    前面我们是用一个mycat对应两个mysql集群,参考:https://www.cnblogs.com/zwh0910/p/17278041.html但是在高并发的情况下,我们的系统也会出现性能的问题,显然是mycat,即所有的压力都压倒mycat上面,所以需要给mycat做集群。mycat做了数据库的代理,在高并发的情况下,必然也会面临单节点性......
  • nacos默认配置启动
    1.相关组件组件说明版本地址Nacos配置及注册中心https://github.com/alibaba/nacos/releasesps:SpringBoot、SpringCloud和nacos集成版本对应关系对照(版本若对应不上,应用可能会启动报错):https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明2.组件......
  • PostgreSQL 13 pacemaker 高可用集群
    环境介绍 操作系统版本CentOSLinuxrelease7.8.2003(Core)  数据库版本psql(13.10)  PCS集群版本[root@hd-clw-select-proxysql01~]# rpm-qa|greppacemakerpacemaker-libs-1.1.23-1.el7_9.1.x86_64pacemaker-cli-1.1.23-1.el7_9.1.x86_64pacemaker-1.1.2......
  • Vulnhub:DC-6靶机
    kali:192.168.111.111靶机:192.168.111.247信息收集端口扫描nmap-A-v-sV-T5-p---script=http-enum192.168.111.247访问目标80端口发现重定向到http://wordy,修改/etc/hosts之后访问使用wpscan爆破目标用户wpscan--urlhttp://wordy-eu爆破用的密码字典根据作......
  • UE5 中的 C++ 相关
    需要在游戏过程中一直存在的代码写在哪?写在继承自UGameInstanceSubsystem类的自定义编程子系统类中。参考:《InsideUE4》GamePlay架构(十一)Subsystems-知乎(zhihu.com)......
  • C# 特殊运算符。
    一、可空类型修饰符?引用类型能用null,但是值类型不能。例如:stringstr=null;intn=null;//报错 为了让值类型也能使用可空类型,就可以使用“?”来表示,语法为“T?”。例如:inti?;//表示可控的类型DataTimetime?;//表示可空的时间 题外话:T?是System.Nullable<T>的......
  • JS基础《JavaScript精粹》笔记摘录
    基础概念和语法基本类型、null、undefined、NaNJavaScript定义了一小批基本类型(primitivetype),它们包括字符串类型(string,单引号或双引号包起来)、数值类型(number,整数和小数都用这个类型)和布尔类型(boolean,值仅有true和false)。JavaScript使用两个特殊的值来表示不存在有意义的值—......
  • 记录--CSS 如何实现羽化效果?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助最近碰到这样一个问题,在一张封面上直接显示书名,可能会存在书名看不太清楚的情况(容易受到背景干扰),如下为了解决这个问题,设计师提了一个“究极”方案,将书名背后的图片模糊一下,这个在CSS中很好实现,仅需backdrop-fil......
  • cout<<endl输出时间过长问题
    做oj题目3333的时候发现了使用cout<<endl;爆出TLE错误的情况而使用printf("\n")、cout<<"\n"、cout<<'\n'以及puts("")都没有这种情况使用cout<<endl;的情况使用cout<<"\n";的情况使用printf("\n");的情况 使用puts(&q......