C# CheckForIllegalCrossThreadCalls的影响和线程的真假确认???
领导让我修改部分程序,在修改的过程中我发现个问题。这个老程序用了很多的窗体Timer,也有部分线程。
但程序使用了CheckForIllegalCrossThreadCalls = false语句,经查询发现该语句是用于跨线程调用不需要采用委托方式,可以直接调用。
在更新脱机地图的图元状态的时候,使用了一个线程来更新,但发现图元更新的非常慢,没有几个图元,但更新速度就像蜗牛在爬。于是反复的查找更新部分为什么会这么慢,但是没有发现(基于可以直接调用UI的控件)。后来没有办法,试试的心态用了委托方式更新图元。结果是很不错的,至少比原来是快了不少。
说了这么多,其实是想了解一下:
CheckForIllegalCrossThreadCalls = false语句存在的情况下,如上的直接操控UI控件的线程和主线程的关系,在使用委托和不使用委托的区别。
我个人理解,独立创建的线程,在使用上面语句后,直接调用UI控件的更改部分,会导致独立线程的处理和主线程的处理归结到了一起,或者说是等待主线程有空处理,所以才会有独立线程并不独立的情况。不知道我的理解对不对??还请了解的大牛说明!!





相关推荐
c#在多线程中访问Form中控件的多种解决方案
c#在多线程中访问Form中控件的多种解决方案,是我看到的最好最全的方案,贡献给大家看看,希望有所启发
C# Winform通用进度条弹窗组件:解决界面卡死与多线程更新
在桌面应用开发中,Winform的单线程UI模型常因耗时操作导致界面假死、白屏,严重影响用户体验。理解消息循环与多线程协作是解决此类问题的核心。通过引入独立的进度条弹窗组件,将耗时任务与界面更新解耦,利用Task.Run、IProgress或BackgroundWorker实现后台执行,并借助Invoke/BeginInvoke安全更新控件,能够在批量导出Excel、上位机数据采集、大文件解析等场景中提供实时反馈与取消能力。本文完整讲解可复用组件的设计思路、核心代码与踩坑实践,帮助开发者快速构建稳定可靠的进
c#中使用多线程访问winform中控件的若干问题.doc
c#中使用多线程访问winform中控件的若干问题.doc
C#实现窗体与子线程的交互的方法
主要介绍了C#实现窗体与子线程的交互的方法,对初学者有一定的学习借鉴价值,需要的朋友可以参考下
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


