C# CheckForIllegalCrossThreadCalls的影响和线程的真假确认???

雪狼孤竹 CSDN会员 雪狼孤竹 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在公司维护一个十年前的WinForm老程序,并且这个程序经过了多人之手修改。
领导让我修改部分程序,在修改的过程中我发现个问题。这个老程序用了很多的窗体Timer,也有部分线程。
但程序使用了CheckForIllegalCrossThreadCalls = false语句,经查询发现该语句是用于跨线程调用不需要采用委托方式,可以直接调用。
在更新脱机地图的图元状态的时候,使用了一个线程来更新,但发现图元更新的非常慢,没有几个图元,但更新速度就像蜗牛在爬。于是反复的查找更新部分为什么会这么慢,但是没有发现(基于可以直接调用UI的控件)。后来没有办法,试试的心态用了委托方式更新图元。结果是很不错的,至少比原来是快了不少。

说了这么多,其实是想了解一下:
CheckForIllegalCrossThreadCalls = false语句存在的情况下,如上的直接操控UI控件的线程和主线程的关系,在使用委托和不使用委托的区别。

我个人理解,独立创建的线程,在使用上面语句后,直接调用UI控件的更改部分,会导致独立线程的处理和主线程的处理归结到了一起,或者说是等待主线程有空处理,所以才会有独立线程并不独立的情况。不知道我的理解对不对??还请了解的大牛说明!!



...全文

相关推荐

c#在多线程中访问Form中控件的多种解决方案

c#在多线程中访问Form中控件的多种解决方案,是我看到的最好最全的方案,贡献给大家看看,希望有所启发

jfbbjf

C# Winform通用进度条弹窗组件:解决界面卡死与多线程更新

在桌面应用开发中,Winform的单线程UI模型常因耗时操作导致界面假死、白屏,严重影响用户体验。理解消息循环与多线程协作是解决此类问题的核心。通过引入独立的进度条弹窗组件,将耗时任务与界面更新解耦,利用Task.Run、IProgress或BackgroundWorker实现后台执行,并借助Invoke/BeginInvoke安全更新控件,能够在批量导出Excel、上位机数据采集、大文件解析等场景中提供实时反馈与取消能力。本文完整讲解可复用组件的设计思路、核心代码与踩坑实践,帮助开发者快速构建稳定可靠的进

weixin_33805743

c#中使用多线程访问winform中控件的若干问题.doc

c#中使用多线程访问winform中控件的若干问题.doc

missyoutwo

C#实现窗体与子线程的交互的方法

主要介绍了C#实现窗体与子线程的交互的方法,对初学者有一定的学习借鉴价值,需要的朋友可以参考下

weixin_38739950

C#?副线程调用主线程的控件

1、取消线程安全保护模式   在程序初始化的时候对要操作的控件设置下面的属性:   System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls  =  false;   2、副线程函数中通过Control.Invoke(Delegate d)来通过委托方式来调用处理控件的方法。   线程函数: private void go() { while (b) { listBox1.Invoke(new DDO(cc));//DDO为委托类型 private delegate void DDO();cc为一个新函数 Th

weixin_38743391
评论 3
收藏 已收藏
分享
返回顶部
雪狼孤竹 CSDN会员
C# 111,129 成员 642,539 内容