我现在有个程序是WinForm(C/S)。程序的大体结构是这样的。主画面(即menu画面),所有的业务画面都是从这个画面衍生出来的。现在的问题是这样的,服务器端会在某些情况下进入维护状态。这个时候需要关闭用户的在客户端打开的所有业务画面。防止数据混乱。我修改了menu画面。将其衍生的画面,放入一个arraylist,服务器维护的时候,就将这个list中的所有画面都dispose掉。开始这个方法没有任何问题。但是当子画面中衍生出其他画面的时候。就会报错。现实该子子画面的主画面已经不存在了。也就是说正常的画面关闭必须要从最底层入手。但是现在代码已经写完了,不可能再大改。我现在的想法是可不可以从线程的角度入手,把除了主画面这个线程外的。其他所有子画面的线程都abort掉。不知道这个方法可不可行。谢谢各位。

解决方案 »

  1.   

    Form.ActiveForm获取此应用程序的当前活动窗体
      

  2.   

    你查看一下System.Windows.Forms.Application,可能有更多的方法供你选择,
      

  3.   

    似乎在.net 1.1里面form没有activefrom阿。
      

  4.   

    1、从客户化设计方面看,服务器端进入维护状态的话只要关闭客户端与其的连接即可,不应关客户端窗口,如果客户正在进行大量的数据输入,快输完时窗口关了,搁谁都会很郁闷。给个提示断开连接就行,不用关窗口。当然,服务端如果恢复正常再向客户端发个消息给客户端再把连接打开就行了。
    2、你所说的画面是指窗体吧,如果你没有显式调用线程对象的话,不管开多少窗口都在主线程里。
    3、按你这样做的话应该把所有窗体都放在arraylist里,然后按后进先出的方式调用每个窗体的close方法。
      

  5.   

    Form.ActiveForm 这个一个静态方法