C#中错误:线程间操作无效,从不是创建控件的线程访问它。

这篇具有很好参考价值的文章主要介绍了C#中错误:线程间操作无效,从不是创建控件的线程访问它。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、原因分析

跨线程调用控件会出现这个错误的原因是因为:.NET禁止了跨线程调用控件, 否则谁都可以操作控件,最后可能造成错误。 所以不是在创建控件所在的线程内调用就会发生这样的错误。

二、解决办法

方法1:设置CheckForIllegalCrossThreadCalls =false 是能去掉这个检查的,但是这不是标准的作法.

方法2:定义一个委托(delegate),委托(delegate)可以将参数与方法传递给控件所在的线程,并由控件所在的线程执行,通过Invoke来调用,这样可以完美的解决此类问题。

Action action = () =>
{
    TimeBox.Text = TimeString;
    ResultBox.Text = hv_ResultStr;
    DisplayImageHalconWindow(AcqImage, GrayImage);
    DisplayImageHalconWindow(ThresholdImage, MeanImage);
};
Invoke(action);

三、总结

在控件的线程中遇到阻塞时可以通过创建另一个线程来解决界面的阻塞问题,例:new Thread(ImageDealThread).Start();将控件所需要处理的事件封装到一个函数里面,通过线程进行调用,跨线程访问控件可以通过定义一个委托(delegate)来将参数与方法传递给控件所在的线程,再通过Invoke来调用。

错误之处,欢迎大家指出!文章来源地址https://www.toymoban.com/news/detail-616772.html

到了这里,关于C#中错误:线程间操作无效,从不是创建控件的线程访问它。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# WinForm 跨线程访问控件

    在WinForm开发中,经常会碰到主线程代码运行过程中需要刷新窗体控件的情况,如果直接在其他线程中去操作窗体控件,这时会抛出线程间操作无效的异常信息,因为窗体控件是由主线程创建的,C#强制要求代码必须是线程安全的,所以不允许跨线程访问。需要使用控件的Inv

    2024年02月04日
    浏览(30)
  • c# 跨线程访问UI控件

            在一个应用程序中,往往存在两种线程:UI线程和工作线程。         UI线程有窗口,创建窗口的控件,且有消息队列对窗口和控件的消息进行管理。主要处理和UI相关的逻辑。         工作线程主要处理和业务相关的比较复杂的逻辑,当处理好之后有可能会调用U

    2024年02月08日
    浏览(31)
  • C#线程操作UI控件

    在写winform程序时候,如果时间长的操作不用线程操作。那么会卡死UI,点击界面就体现为未响应。为此需要对耗时操作用线程处理,比如检验的监听程序就是一个死循环,不停检查文件夹或数据库又没有数据,然后上传。如果不时有线程,在数据多的情况,程序是基本点不动

    2024年02月13日
    浏览(26)
  • QT子线程或自定义类操作访问主界面UI控件的几种方法

            QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: (1)例如有个自己定义的类CustomClass,在自定义类里包含主界面指针MainWindow * class MainWindow;   class CustomClass { public:     CustomCla

    2024年02月09日
    浏览(45)
  • MySQL启动服务时发生系统错误 5,拒绝访问且管理员权限无效、net start mysql 服务名无效解决方法

    在重启MySQL服务后,报错 启动服务时发生系统错误 5,拒绝访问 网上查询解决办法都是使用管理员权限开启CMD运行 net start mysql 会报错 服务名无效 ,解决办法为修改为 net start mysqlXX ,XX为版本号,如我的8.0就是 net start mysql80 运行后仍然会报错 启动服务时发生系统错误 5,拒

    2024年02月01日
    浏览(33)
  • 全网多种方法解决Invalid Host header(无效的主机头)服务器域名访问出现的错误

    在搭建 vue-cli 环境,用 nginx 做代理服务器,访问时却显示: Invalid Host header 。 知其然,知其所以然,我们在解决该问题之前,要弄明白 Invalid Host header 是什么。 ChatGPT 目前正火,可以借助 ChatGPT 来回答, Invalid Host header 是什么,如下图所示: The “Invalid Host header” error typ

    2024年02月03日
    浏览(29)
  • Winform UI界面设计例程——多线程访问UI控件

    这里讨论两种多线程访问UI控件的方法,线程完成后更新Lable控件 如下图,第一种方式为方式1按钮按下,线程运行,并更新label 第二种方法为按下方式2按钮,线程运行,完成后更新label  新建winform项目程序,布局如上,大家可以不用配色,简单即可 引用 using System.Threading;  

    2023年04月08日
    浏览(28)
  • 【已解决】多种方式最新解决Invalid Host header(无效的主机头)服务器域名访问出现的错误

    🐱 个人主页: 不叫猫先生 ,公众号: 前端舵手 🙋‍♂️ 作者简介:CSDN博客专家、内容合伙人,2023新星计划导师,前端领域优质创作者,共同学习共同进步,一起加油呀! 📢 资料领取:前端进阶资料可以找我免费领取 Invalid Host header 这个报错在网上有很多文章介绍解决

    2024年02月08日
    浏览(30)
  • HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效——错误代码:0x8007000d

    报错图片: 最近在课上学习IIS发布.NET Core项目出现HTTP错误500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效——错误代码:0x8007000d 就是下面这样子的情况: 原因分析: 这边好像是缺少【ASPNETCoreModuleV2】文件,需要在微软官网下载运行组件,并安装

    2024年02月02日
    浏览(32)
  • c#入门-Task创建线程

    在c#中,有线程类。激活线程对象就可以实现多线程。 不过,这是在代码角度来说的。你可以在代码中创建一万个线程。 但实际上你的cpu没有一万个逻辑处理器来真正同时执行这一万个线程。 所以我们称创建一万个线程为创建一万个并发——我们希望同时执行一万个线程,

    2024年02月01日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包