一个主程序,用于显示窗体。一个监控程序,用socket。现在要把监控程序集成到主程序中,由于监控程序在accept的时候就阻止了,所以主窗体无法显示。用一个新线程执行监控程序,但监控程序要使用主窗体控件的句柄(比如form),要怎样把主窗体的句柄传到监控程序,又不到导致报异常(操作非线程控件),谢谢!!!!

解决方案 »

  1.   

    可能消息列队的没有处理好放在accept之前呢
     Application.DoEvents();
      

  2.   

    主线程中写
    SynchronizationContext mainThreadSynContext = SynchronizationContext.Current;
    子线程写
    mainThreadSynContext.Post(new SendOrPostCallback(你要通知界面的方法));
    所有子线程需要通知界面的话都需要同步到主线程执行
      

  3.   

    只能用委托,因为在线程之间传递FROM会提示建立的执行绪不同.
      

  4.   

    mainThreadSynContext.Post(new SendOrPostCallback(你要通知界面的方法)); 
    你要通知界面的方法 是什么意思?
      

  5.   

    譬如说你加个方法叫
    void Connected(object state)//state参数你可以自己定义,把线程中的信息发过来,它就是Post的第二个参数
    {
       这儿操作界面,告诉用户已连接
    }
      

  6.   

     在其他线程操作控件时候要使用委托.
     //起用委托
            this.Invoke(new MethodInvoker(DisplayReceiveMessage));