У нас есть консольное приложение: Как обрабатывать закрытие консольного приложения
namespace MyApplication
{
public void Main()
{
try
{
AppDomain.CurrentDomain.ProcessExit += (sender, eventArgs) => Stop();
Start();
Console.ReadLine();
}
finally
{
Close();
}
}
public void Start()
{
//...
}
public void Stop()
{
//...
}
}
Так что, если приложение будет остановлено, собственно (нажатием Enter
в окне консоли) Close()
метод вызывается из finally
& AppDomain.CurrentDomain.ProcessExit
Но когда приложение закрыто на Close button
или прекращено с Task Manager
Close()
метод вообще не называется.
Вопросов:
- Почему
finally
блок не работает? - Как справиться с закрытием консоли на
Close button
? деструктор
UPD Даже объекта не называется:
public class Watcher
{
Action _start;
Action _stop;
public Watcher(Action start, Action stop)
{
_start = start;
_stop = stop;
}
~Watcher()
{
_stop();
}
public void Start()
{
_start();
}
}
// And using as:
var w = new Watcher(Start, Stop);
w.Start();
деструктор не вызывается!
Пожалуйста, обратитесь к http://blogs.msdn.com/b/jmstall/archive/2006/11/26/process-exit-event.aspx – Zen