В С# Предположим, что я в форме, и я нажал кнопку, которую я сделал, чтобы закрыть ее.
this.Close();
some_action(); //can I do this??
Можно ли выполнить другое действие после того, как я закрыл форму, или нить умирает, и все после этого потеряно?
В зависимости от того, что вы пытаетесь сделать, и контекста инструкции. Если закрываемая форма является основной формой, которой принадлежит цикл сообщений, вы не можете использовать материал, связанный с пользовательским интерфейсом (например, вы не можете отобразить другой MessageBox
). Если вы не делаете это из другого окна (которое не принадлежит контуру сообщения), вы можете сделать что угодно (даже связанный с пользовательским интерфейсом), если вы не манипулируете закрытым объектом формы (вы получите ObjectDisposedException
только как любой расположенный объект).
Кстати, поток не умирает в результате Close
. Закрытие главного окна приводит к завершению цикла сообщения, а не к самому потоку. Например, следующая программа
static void Main() {
Application.Run(new Form1());
Application.Run(new Form2());
}
отобразит Form2
после закрытия Form1
(используя только что созданный цикл сообщений). Это доказывает, что нить не мертва.
Если вы пытаетесь манипулировать формой или любым из них, то после вызова Close вы столкнетесь с проблемами. Однако ничего не мешает вам вызвать какой-либо другой метод - например, метод ведения журнала - после вызова Close.
Обработайте событие FormClosing и выполните дополнительные действия в обработчике событий.