Процесс не завершается при закрытии программы

Почему процесс все еще находится в диспетчере списка задач Windows после закрытия программы?

Я использую логин Form.cs

[STAThread] static void Main()

После успешного входа пользователя я перенаправляю на другую главную страницу

this.Hide(); Main_Usr oMainUsr = new Main_Usr(); oMainUsr.Visible = true;

Моя псевдо-мастер-страница вроде этого:

public Main_Usr()

Когда я закрываю главную страницу, процесс все еще находится в диспетчере списка задач Windows. Но когда я закрываю страницу входа, он убивает процесс в диспетчере списка задач Windows.

Это означает, что я просто скрываю страницу входа в систему? я должен закрыть все окно, чтобы действительно завершить / завершить процесс?

Заранее спасибо, Стев

user609511 25 Апр 2012 в 12:55
Вам просто нужно закрыть форму входа (примечание: форма, а не страница)
25 Апр 2012 в 12:59

6 ответов

Лучший ответ

В winforms процесс будет остановлен, когда основная форма приложения будет закрыта. Основная форма приложения указана в вызове Application.Run. В вашем случае это форма входа:

КАК УБИТЬ ЛЮБОЙ ПРОЦЕСС В WINDOWS


Application.Run(new Login());

Чтобы закрыть форму, вы должны вызвать метод Close . Когда вы вызываете Hide или устанавливаете для Visibility значение false, форма остается в памяти. Он просто скрывается от пользователя.

Итак, для достижения желаемой функциональности вам следует изменить основную форму приложения на Main_Usr:

static void Main() < Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Main_Usr()); // change main form >

Затем подпишитесь на событие Load формы Main_User. И в обработчике событий сделайте следующее:

private void Main_User_Load(object sender, EventArgs e) < using (var loginForm = new Login()) < Hide(); // hide main form if (loginForm.ShowDialog() != System.Windows.Forms.DialogResult.OK) < Close(); // close main form and kill process return; >Show(); // show main form if user logged in successfully > >

Читайте также:
Программа для настройки клавиатуры zet gaming blade

ОБНОВЛЕНИЕ: вы можете сделать все это в методе Main, например, таким образом

static void Main() < Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); using(var loginForm = new Login()) if (loginForm.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; Application.Run(new Main_Usr()); // change main form >

Но обычно я не скрываю основную форму и показываю ее под формой входа. Итак, в этом случае вам следует использовать обработчик событий Load . Тебе решать.

Кстати, в winforms нет мастер-страниц и страниц. Все это для ASP.NET. Здесь у вас есть формы 🙂 Также рассмотрите возможность именования, например, LoginForm, MainForm и т. Д.

Sergey Berezovskiy 25 Апр 2012 в 13:31

Это связано с тем, что цикл сообщений приложения связан с вашей формой Login ( Application.Run(new Login()) делает это), поэтому вам нужно закрыть форму, которая запустила приложение, чтобы завершить процесс.

В качестве альтернативы, вы можете просто позвонить LoginForm.Show() перед Application.Run , сохранить где-нибудь учетные данные, а затем вызвать Application.Run(new Main_Usr)

Источник: question-it.com

Что делать если процесс не завершается?

Прежде всего, стоит попробовать закрыть программу через стандартный диспетчер задач. Нажмите Alt+Ctrl+Del, во вкладке «Приложения» найдите зависшую программу и нажмите «Снять» задачу. Если это не помогло, перейдите во вкладку «Процессы», найдите зависший процесс и нажмите «Завершить процесс».

Что делать если при закрытии процесса пишет отказано в доступе?

Для завершения нежелательных процессов, отказывающихся подчиняться пользователю, нужно воспользоваться помощью «Диспетчера задач». Если у вас установлен Windows 7, достаточно кликнуть правой клавишей мышки по нижней панели задач, выбрать параметр «Запустить Диспетчер задач».

Как завершить все процессы?

Если вы хотите остановить все процессы IE, вы можете использовать командную строку для этой задачи. Просто откройте командную строку от имени администратора, введите эту команду: taskkill/F/IM iexplore.exe и нажмите Enter.

Как закрыть программу которая не закрывается через диспетчер задач?

Нажмите Alt+Ctrl+Del, во вкладке «Приложения» найдите зависшую программу и нажмите «Снять» задачу. Если это не помогло, перейдите во вкладку «Процессы», найдите зависший процесс и нажмите «Завершить процесс». В большинстве случаев зависшая программа после этого закроется.

Как завершить операцию на компьютере?

  1. Нажать на сочетание клавиш Ctrl + Alt + Del. .
  2. Выбрать в появившемся окне «Диспетчер задач». .
  3. Перейти во вкладку «Приложения».
  4. Выбрать зависшую программу и нажать на кнопку «Снять задачу» или «Завершить задачу».
Читайте также:
Какие программы для общения в играх

Как снять задачу в диспетчере задач если отказано в доступе?

  1. Не завершается процесс в «Диспетчере задач» (отказано в доступе). .
  2. Перезагрузка системы
  3. Завершение активных процессов через командную строку
  4. Остановка процессов с указанием идентификаторов
  5. Совет от Microsoft.
  6. Использование утилиты Process Explorer.

Как остановить процесс в Windows 10?

  1. Шаг: 1 Откройте Диспетчер задач.
  2. Шаг: 2 Нажмите «Подробнее» в правом нижнем углу, чтобы открыть более подробный вид.
  3. Шаг: 3 Выберите нужную программу или игру в списке приложений.
  4. Шаг: 4 Нажмите кнопку «Снять задачу» или нажмите клавишу Del на клавиатуре.
  5. Все. .
  6. Примечание. .
  7. Примечание.

Что значит убить процесс?

Завершение процессов Если в процессе работы на компьютере вы стали замечать, что он заметно подвисает, значит, ему тяжело выполнять все возложенные на него задачи. Это происходит, когда вы запускаете множество процессов, а потом их просто забываете остановить.

Как завершить процесс в Windows 7 через командную строку?

Для завершения процессов через командную строку в Windows 7 или Windows 10 нужно использовать команду «taskkill». Данная команда позволяет завершить процесс на локальном или удаленном компьютере по его названию или идентификатору (PID).

Как остановить процесс в виндовс?

Уничтожение процесса из диспетчера задач

Для запуска Диспетчера задач Windows нажмите на клавиатуре Ctrl + Shift + Esc. В появившемся окне во вкладке процессы необходимо найти процесс данной программы, выбрать его и нажать кнопку Завершить процесс.

Как закрыть все процессы Google Chrome?

  1. Найдите cmd / командную строку в строке поиска.
  2. Откройте cmd с помощью «Запуск от имени администратора». .
  3. Используйте список задач команды, чтобы вывести список всех процессов.
  4. Используйте команду taskkill / F / IM «chrome.exe» / T, чтобы завершить все свои процессы.

Как перезапустить все процессы на компьютере?

Откройте диспетчер задач и перейдите на вкладку службы , найдите UIFlowService, щелкните его правой кнопкой мыши и выберите команду перезапустить.

Источник: dmcagency.ru

После закрытия программы остаётся процесс в диспетчере задач

После закрытия программы остаётся процесс в диспетчере задач.

Как определить из-за чего это происходит?

При запуске программы через F5 программа после закрытия правильно завершается.

Читайте также:
Какая программа замедляет видео

Но после закрития при запуске Alt F5 висит в диспетчере.

Ответы (1 шт):

CLR завершает .NET-приложение тогда, когда все его не фоновые потоки завершили работу. Поток завершает работу, когда его главная функция возвращает управление (или при вызове метода Abort). Для приложений WPF поведение основного потока определяется свойством Application.ShutdownMode, по умолчанию он завершается при закрытии всех окон.

Соответственно, методика отладки такой ситуации такова:

  • Убедиться, что в программе не остается невидимых окон, мешающих закрытию основного потока.
  • Если приложение создает (явно) дополнительные потоки, которые бесконечно работают и никогда не возвращают управление, при их запуске нужно установить свойство IsBackground = true .
  • Если приложение не создает дополнительных не фоновых потоков, после завершения всех своих потоков нужно приостановить выполнение программы ( Отладка — Приостановить все ) и открыть окно потоков ( Отладка — Окна — Потоки ). В данном окне можно увидеть содержимое стека для каждого потока, и на основе этого понять источник проблемы. Если проблемный поток создает код сторонней библиотеки, нужно обратиться к ее документации и выяснить, как это исправить.
  • Если проблемным потоком оказался «GC Finalizer Thread», нужно убедиться, что для всех IDisposable-объектов вызывается метод Dispose или его аналог (для файловых потоков, соединений с БД и т.п. нужно всегда явно освобождать ресурсы, чтобы избежать проблем с буферизацией/кэшированием).

Дело в том, что финализаторы — очень ненадежный метод освобождения ресурсов. В некоторых ситуациях они могут приводить к взаимоблокировке, если поток сборщика мусора пытается взять Lock или на объект, занятый другим потоком, выполнение которого было прервано сборкой мусора (см. например здесь описание такой ситуации для STA COM-объектов).

Вызов метода Environment.Exit позволяет принудительно завершить программу (независимо от числа активных потоков), но так делать не следует. При этом не вызываются блоки finally в выполняющемся коде, как следствие — какие-то данные могут не дойти из промежуточных буферов до их места назначения (файл, БД, . )

Примечание — потоки из ThreadPool по умолчанию являются фоновыми, о них можно не заботиться, они никогда не предотвращают завершение программы.

Руководство на основе обсуждения в недавнем вопросе «Консольное приложение не завершается», который почему-то снесли, поэтому оставляю информацию здесь.

Источник: husl.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru