C# 一个窗体ShowShowDialog另一窗体后,如何在前一个窗体关闭ShowDialog那个窗体
网上搜了一些资料,说到解决方法是使用多线程,有谁可以给个例子,谢谢。

解决方案 »

  1.   

    不能,这个窗体自己关了不就行了,modal后,你也操作不了别的窗体了,除非用定时器操作
      

  2.   

    这个必须等待前一个窗体收到关闭ShowShowDialog命令才能关闭,时间是不可预知的,另外问一下,我使用Show的方式为什么界面是空白,而使用ShowShowDialog却没有这个问题,谢谢
      

  3.   

    ShowDialog本身就是为了让你只能操作被ShowDialog的窗体,“被”ShowDialog的窗体不关闭,那打开它的窗体是不能操作的。如果你想实现你所说的功能,直接用show方法不就好了吗?为什么还要用ShowDialog呢?
      

  4.   

    我使用Show的方式为什么界面是空白,包括窗体中的控件都不显示了,而使用ShowShowDialog却没有这个问题,数据可以正常显示,不知道为什么,好像是UI线程的问题。
      

  5.   


    用show()应该是没有任何问题的,至于为什么是空白的,估计是你程序有bug。
    你可以用简单的测试程序试一下:
    在窗体1的button_Click时间中这么写:
    From2 f2 = new Form2();
    f2.Show();
      

  6.   


    如果你show的时候有大量的数据在处理,那么那些数据处理就会占用界面资源,导致界面卡死。
    使用线程池可以解决此问题。
      

  7.   

    你提到的简单测试肯定是没有问题的,我这里前一个窗体需要和后一个窗体之间一直保持数据传输,从而产生的Show和ShowShowDialog的区别,不知道区别在哪里...
      

  8.   

    有道理,线程池没用过,是自定义数据缓冲区吗?还是.NET中间已经定义好的类库可供使用?
      

  9.   

     void DoWithCommon() 
    {            
          WaitCallback waitCallback = new WaitCallback(this.InvokeMethod);
          ThreadPool.QueueUserWorkItem(waitCallback);            
    }
     InvokeMethod(object x)
    {}
    上面那段代码可解决界面卡死问题。我不明白的是你不关闭f2,却想通过关闭f1来关闭f2,这是为什么呢?
    从C/S架构的原理上说不通啊。
      

  10.   

    谢谢,设计需要,f1是需要一直运行呢,相当于一个传输控制中心,不是通过关闭f1来关闭f2而是在f1中关闭f2,f1不关闭。
      

  11.   

    另外,请问zerodegrees:
    C# Show和ShowShowDialog什么区别导致Show在处理大量数据时出现假死现象而ShowShowDialog不受此影响
      

  12.   

    这样的话,不推荐用showdialog,你用show()+线程池吧,应该能解决的。
    如果用showdialog会用到很麻烦的多线程编程,也能解决,但比上面那个要麻烦多了。
      

  13.   

    zerodegrees,很感谢你,能说下ShowDialog方式中多线程解决思路吗?
      

  14.   


    说实话,这个我还确实不是很清楚,我按我的理解说说吧。
    show和showdialog的线程机制是不一样的。
    showdialog的时候f1无法操作,所以f1不会占用太多的界面资源。
    show的时候f1和f2会同时占用界面资源。
      

  15.   


    介个我就不清楚了,O(∩_∩)O~
    快下班了,see you!
      

  16.   

    哦,谢谢!那个线程池的方法,
    WaitCallback waitCallback = new WaitCallback(this.InvokeMethod);
    我这里InvokeMethod是一个委托,好像参数不匹配...~~~~(>_<)~~~~