C#为什么多线程控制winform需要用委托?

来源:百度知道 编辑:UC知道 时间:2024/05/12 07:08:18
C#为什么多线程控制winform需要用委托?比如我新起了一个线程A,在A线程里要对winform的list控件里显示数据,我需要用一个委托函数来实现。
为什么要搞的这么繁琐呢?我想从深层次上知道点原因,谢谢!

因为winform是主线程创建的,你用另外一个线程来调用它就可能会出现两个线程同时访问同一个资源的问题,这个时候很容易出现错误,比如A线程改变窗口的颜色为红色,B线程取窗口的颜色,如果这两个线程正好碰到一起,可能A略先于B,那么就是B取出来的红色,如果略后于那么就是原来的颜色,而这和CPU的繁忙度、时间片的轮转是相关的,是一种随机的情况,那么B取出来的颜色就不可靠了,因此为了避免这种状况采用委托,B线程向A线程发出委托,由A线程来完成取色工作,那么可以保证取色工作的稳定性,结果也可靠

如果你实在想通过另一个线程访问winform,可以在窗口的构造函数中加入
Control.CheckForIllegalCrossThreadCalls = false;
这样可以屏蔽这个错误,不过建议还是用委托

别误人子弟了~~
什么B线程向A线程发出委托?貌似上面的连委托是做什么用的都不知道吧~~~

如果是用同步刷新 winform里的控件是完全可以用
Thread t = new Thread(方法名);
t.Start();
去完成

但要是用到异步的话就要用委托了
其实别想太复杂,只是一种格式问题而已,和委托没什么关系
就如有一个方法 void add(int a){..}
你调用时
add("1");//这样就会报错
add(1);
格式而已

因为不委托的话容易线程堵塞 就异常了

学习了,感谢LM, 我爱我爱恶魔猎, jayasme