在C#中, 假设我是一个表格,我按下了一个按钮来关闭它。
this.Close();
some_action(); //can I do this??
我可以在关闭表单后执行另一个操作,还是线程死掉,之后的所有内容都丢失了?
答案 0 :(得分:3)
取决于您要执行的操作以及声明的上下文。如果正在关闭的表单是拥有邮件循环的主要表单,则您无法执行任何与UI相关的内容(例如,您无法显示另一个MessageBox
)。如果你不是从另一个窗口(它不拥有消息循环)那样做,你可以做任何事情(甚至是UI相关的),只要你不操纵封闭的表格对象(你将获得{{1}就像任何处置对象一样)。
顺便说一句,线程不会因ObjectDisposedException
而死亡。关闭主窗口会导致消息循环终止,而不是线程本身。例如,以下程序
Close
关闭static void Main() {
Application.Run(new Form1());
Application.Run(new Form2());
}
后,将显示Form2
(使用新创建的消息循环)。这证明线程没有死。
答案 1 :(得分:2)
如果您在调用Close后尝试操作表单或其中的任何控件,则会遇到麻烦。但是,在调用Close之后,没有什么可以阻止你调用其他方法 - 例如记录方法。
答案 2 :(得分:1)
处理FormClosing Event并在事件处理程序中执行其他操作。