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