Как завершить процесс после закрытия всего приложения в C # .NET? - PullRequest
2 голосов
/ 26 октября 2009

У меня есть настольное приложение .NET 2005 (C #), в котором есть форма входа и форма MDI, которые затем имеют несколько подчиненных форм. Все остальные формы открываются только в форме MDI.

После того, как пользователь входит в систему, я скрываю форму входа в систему и затем показываю форму MDI, но когда я закрываю форму MDI, мой процесс приложения не заканчивается, потому что форма входа по-прежнему скрыта. Я хочу, чтобы, когда пользователь закрывал форму MDI, все приложение закрывалось (по сути, процесс не должен отображаться в диспетчере задач), потому что если каждый раз, когда пользователь закрывает и повторно открывает приложение и входит в систему, он создает некоторые проблема с производительностью.

Я делаю что-то вроде ниже:

//my login validation script,

//after successful login

this.Hide();

if (globalData.ObjMdiMain.IsDisposed)
{
    globalData.ObjMdiMain = new mdiMain();
}
globalData.ObjMdiMain.Show();

globalData - мой статический класс, в котором я создаю глобальные объекты, которые требуются всему приложению. Там я определил ObjMdiMain объект моей формы MDI, и я получаю к нему доступ в форме входа в систему.

Итак, есть ли какой-либо метод или функция, которая завершит весь процесс из системы, что-то вроде «Application.End ();» или что-то еще?

Спасибо!

Ответы [ 7 ]

8 голосов
/ 26 октября 2009

Я предполагаю из вашего описания (пожалуйста, исправьте меня, если я ошибаюсь), что у вас есть форма входа, установленная в качестве формы запуска, например:

    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new LoginForm());
    }

Не делай этого. Вместо этого замените его следующим образом:

    static void Main() {

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        LoginForm frm = new LoginForm();
        if(frm.ShowDialog() == DialogResult.Cancel) {
            return;
        }

        Application.Run(new MdiForm());
    }

В коде формы входа в систему вообще не вызывайте форму MDI, просто подтвердите имя пользователя и пароль и разрешите выход из формы входа. Затем метод Main будет правильно вызывать форму MDI.

После закрытия формы MDI ваше приложение естественным образом завершит работу.

1 голос
/ 26 октября 2009

Полагаю, вы смотрели Application.Exit ?

1 голос
/ 26 октября 2009

Мне кажется странным, что вы оставляете окно входа в систему скрытым после первоначального входа. Почему бы не закрыть его? Тогда у вас не будет текущей проблемы: после успешного входа в систему у вас будет только главное окно MDI, которое при закрытии выходит из запущенного приложения Windows Forms. Есть ли причина, по которой вы скрываете окно входа вместо того, чтобы закрывать его?

0 голосов
/ 29 октября 2009

Кажется, ошибка коннектора MySql .net, потому что я использовал DLL коннектора MySQL для соединения с моей базой данных MySQL. Я также видел некоторые другие жалобы на это. Увидеть http://bugs.mysql.com/bug.php?id=36688

Я использовал MySQL .net Соединитель DLL версии 5.1, я только что обновился до 6.1 (последняя версия), и он работает без ошибок.

Загрузите последнюю версию DLL здесь: http://dev.mysql.com/downloads/connector/net/6.1.html

Спасибо

0 голосов
/ 26 октября 2009

Вот способ закрытия реального процесса, но это плохой способ закрыть приложение:

Environment.Exit(Code) 

Вы можете установить код на 0. или другое целое число, это скажет Windows, что результат выполнения приложения.

Советую сначала закрыть форму входа, а затем закрыть приложение, это правильный путь.

Удачи;)

0 голосов
/ 26 октября 2009

Ненавижу тебе это ломать, но ... Application.Exit() - это то, что ты просишь. Если бы вы на самом деле пытались, вы бы нашли это. Тем не менее, я должен согласиться с peSHIr, почему вы сохраняете форму входа, если это вызывает у вас проблемы?

0 голосов
/ 26 октября 2009

Существует Application.Exit () , который отправит сообщение Windows, чтобы закрыть все формы и выйти из цикла сообщений.

...