问题是:
   有两个线程,一个ui线程(主线程),一个socket接收线程,在socket接收线程上接收到一条命令后弹出一个窗体(monitorForm),我调用monitorForm.invoke(new EventHandle(handleProcess)),在handleProcess方法中调用monitorForm.showDailog().按理说invoke是跳转到ui线程上的,上面所说的monitorForm.showDialog()应该阻塞ui线程,但也阻塞了socket接收线程,请高手指点……。

解决方案 »

  1.   

    在handleProcess中重新开辟一个线程,调用monitorForm.showDailog()试试
      

  2.   


    private void OpenForm()
    {
       this.Invoke((MethodInvoker)delegate
                {
                    monitorForm.showDailog();
                });
    }
    在socket 线程中调用  OpenForm()
    可以试试
      

  3.   

    monitorForm.invoke阻塞了当前线程,同步当前线程和monitorForm所在线程的。概念没弄清楚哦。
    你可以考虑用SendMessage,然后在monitorForm中,重载WndProc,拦截自定义消息(0x400以后的可用)。弹出内容。
      

  4.   


    大哥,我用了你说的方法,可结果是一样的,这是windows mobile 上的程序,写个log文件都会将线程阻塞。
      

  5.   

    知道了,sendMessage是同步的,发送线程将被阻塞到接收线程处理完消息为止。具体说明看http://www.soidc.net/articles/1215485053486/20070317/1215945563294_1.html应该用postMessage
      

  6.   

    postMessage 说明:
    http://www.cnblogs.com/arongbest/archive/2009/05/06/1450467.html
      

  7.   

    是的,需要用PostMessage。
    你的mobile程序可以自己处理消息?
      

  8.   

    mobile程序不支持重载WndProc。很多人问如何子类化来处理自定义消息。你知道如何子类化就很好了。没什么。
      

  9.   

    重载MessageWindow,问题解决了,多谢wuyazhe!