Следующий код не выходит из приложения. Как я могу выйти из приложения и убедиться, что все запущенные потоки закрыты?
foreach (Form form in Application.OpenForms)
{
form.Close();
}
Application.Exit();
Следующий код не выходит из приложения. Как я могу выйти из приложения и убедиться, что все запущенные потоки закрыты?
foreach (Form form in Application.OpenForms)
{
form.Close();
}
Application.Exit();
Вы не показываете использование каких-либо потоков в коде, но пусть предположим, что в нем есть потоки. Чтобы закрыть все ваши потоки, вы должны установить все их в фоновый поток перед их запуском, затем они будут автоматически закрыты при выходе приложения, например:
Thread myThread = new Thread(...);
myThread.IsBackground = true; // <-- Set your thread to background
myThread.Start(...);
"Статья HOWTO: Остановить несколько потоков" от Microsoft: http://msdn.microsoft.com/en-us/library/aa457093.aspx
Вы можете попробовать следующий код:
Environment.Exit(Environment.ExitCode);
Это должно работать для всех потоков, которые вы открыли.
protected override void OnExiting(Object sender, EventArgs args)
{
base.OnExiting(sender, args);
Environment.Exit(Environment.ExitCode);
}
Я прошел аналогичную проблему в своем программном обеспечении, но, к сожалению, просто заставляя потоки работать в фоновом режиме, это не решило проблему. Фактически, когда поток возвращает данные (основное программное обеспечение управляется данными), и если я закрою приложение, это приведет к ошибке Windows, что приведет к отладке сообщения.
Итак, что на самом деле сработало для меня:
Шаг 1: Сделал все потоки в фоновом режиме, например
Thread aThread = new Thread(MethodName);
aThread.IsBackground = true; //<-- Set the thread to work in background
aThread.Start();
Шаг 2: В заключительном действии формы/приложения вызывается метод Environment.Exit, например
Environment.Exit(Environment.ExitCode);
Это обеспечило правильную работу памяти без утечки памяти.
Надеюсь, что это поможет.
Это сделало для меня работу:
Вместо использования:
Application.Exit()
который открывает другие потоки, попробуйте использовать:
Environment.Exit(Environment.ExitCode);