以前写代码的时候很少会去考虑线程方面的东西(其实倒是有遇到问题,但都回避了),不过最近为公司写的一个与国外数据数据库服务交互的小工具时遇到问题了。 由于数据量比较大,而且运算量也比较大,直接导致程序界面假死或程序跑一半的时候崩溃了, 所以在研究如何去优化这个程序。 发现用来更新UI界面的方法还真不少, 有用代理的,有用Application.DoEvents()的,觉得有必要把这些方法总结下,下次再遇到两样问题的时候就不会如此之囧了

通常用线程来更新UI的方法有以下几种:

1.使用Application.DoEvents();

2.使用委托delegate

3.使用BackgroundWorker; 最偷懒的办法(Winform/Silverlight通用)

4.设置Control.CheckForIllegalCrossThreadCalls为false,相当于不检测线程之间的冲突

5.Dispatcher.BeginInvoke--Silverlight的独门秘籍

6.利用SynchronizationContext上下文 -- 最神秘的方法(Winform/Silverlight能用)

接下来我会结合一些简单的例子来学习和总结这些方法。