需要在子线程中更新UI的地方过多,写那很多delegate太麻烦,怎么办?
我先把程序的所有功能写成一个dll,然后做界面.
界面调用dll中的方法来实现程序的功能.
dll中的事件来通知界面层更新界面,如此如此........
问题1:大家是不是都是这样写程序的啊?呵呵,我是新手.
由于在dll中事件的触发都是在子线程中触发的.
那么到了界面层都需要用到委托然后this.Invoke....才能完成更新界面.
每个事件的参数都不一样,那么我就要写不同的委托.
如果事件非常非常的多,那么我就要写好多好多个委托.
然后在构造函数中定义好多好多个委托对象.
再实例化这好多好多个委托对象.
问题2:这样一来就好乱哦.那么比较正规的做法是什么呢?
[解决办法]
由于在dll中事件的触发都是在子线程中触发的.
这个做法一般是错误的,正确的做法是发布的事件要是在创建该对象的线程中触发
东西给别人用,别人不可能还去用Thread.Current来测试一下你的事件是不是在当前线程触发的。。。
正确做法:
class TestClient { private Thread workThread; private SynchronizationContext mainThreadSynContext; public event EventHandler Connected; public TestClient()//构造函数当然是主线程执行的 { mainThreadSynContext = SynchronizationContext.Current; workThread = new Thread(new ThreadStart(DoWork)); } private void OnConnected(object state)//由于是主线程的同步对象Post调用,这个是在主线程中执行的 { if (Connected != null) Connected(this, EventArgs.Empty); } private void DoWork()//这个是workThread线程执行的 { //这儿做些事(连接什么的。。。) //这而干完了 if (Connected != null) mainThreadSynContext.Post(new SendOrPostCallback(OnConnected), null); } }