子线程更新UI界面的时候要用到Invoke.
那么如果要避免使用Invoke,特别是一个项目分工的时候,我做业务逻辑,人家做界面,我做完后给人家用的时候要避免让人家还要去判断是否要使用invoke,应该如何做呢?
也有人告诉我说在业务逻辑的构造函数中传入界面层的上下文(SynchronizationContext),除了这个方法还有其他的方法吗?
望高手们解答.

解决方案 »

  1.   

    你公开出来一个更新方法,在你的方法判断是否有Invoke的需要,别人不用关心实现细节的。
      

  2.   

    用backgroundworker也行。
    在WinForm中经常遇到一些费时的操作界面,比如统计某个磁盘分区的文件夹或者文件数目,如果分区很大或者文件过多的话,处理不好就会造成“假死”的情况,或者报“线程间操作无效”的异常,为了解决这个问题,可以使用委托来处理,在.net2.0中还可以用BackgroundWorker类。BackgroundWorker类是.net 2.0里新增加的一个类,对于需要长时间操作而不需要用户长时间等待的情况可以使用这个类。 注意确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。http://blog.csdn.net/zhoufoxcn/archive/2007/10/19/1832819.aspx
      

  3.   

    从.net1.1延续的一种方法:
    这样设置:
    System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false; 
    子线程可以直接访问控件。
      

  4.   

    System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false