我可以在Form.Close()之后放置命令吗?

3
在C#中,假设我在一个窗体中,我按下了一个我创建的按钮来关闭它。
this.Close();
some_action(); //can I do this??

我关闭表单后,是否可以执行其他操作,还是线程会终止并且此后的所有操作都将丢失?


9
你尝试的时候发生了什么事情? - Eric Lippert
3个回答

3

取决于您想做什么以及语句的上下文。如果要关闭的表单是拥有消息循环的主表单,您就无法执行任何与UI相关的操作(例如,无法显示另一个MessageBox)。如果您不是从另一个窗口(该窗口不拥有消息循环)进行操作,则可以执行任何操作(即使与UI相关),只要您不操纵已关闭的表单对象(您将像任何已处理对象一样收到ObjectDisposedException异常)。

顺便说一句,线程并不会因为Close而死亡。关闭主窗口会导致消息循环终止而不是线程本身。例如,以下程序

static void Main() {
    Application.Run(new Form1());
    Application.Run(new Form2());
} 

Form1 关闭后(使用新创建的消息循环),会显示 Form2。这证明线程并未停止。


2
如果您在调用Close之后尝试操纵表单或其任何控件,将会遇到麻烦。但是,调用Close后调用其他方法(例如日志记录方法)没有任何阻止。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接