2016-11-30 2 views
0

Так что в моем конструкторе формы у меня есть проверка аргумента. Если я получу один из двух специальных аргументов, я хочу просто зарегистрировать/отменить регистрацию моего сервера и закрыть программу. Я не хочу, чтобы форма загружалась в этих случаях. Однако, поскольку в настоящее время данный код успешно зарегистрирован/отменяет регистрацию сервера, но он не убивает мое приложение сразу после того, как я этого хочу. Любая другая команда для этого? Или, может быть, есть лучший способ сделать то, что я пытаюсь сделать?Application.Exit Не закрывает мою программу, никаких альтернатив?

Мой код:

public Form1() 
    { 
     InitializeComponent(); 
     instance = this; 
     fillMeasView(); 

     string[] args = Environment.GetCommandLineArgs(); 
     if (args.Length > 1) 
     { 
      switch (args[1]) 
      { 
       case "register": 
        try 
        { 
         slikServer1.RegisterServer(); 
         MessageBox.Show("Server registered successfully!"); 
        } 
        catch(Exception ex) 
        { 
         MessageBox.Show("Error: Could not register server." + "\nAdditional Information: " + ex.Message, "Registering Server Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
        } 
        Application.Exit(); 
        break; 
       case "unregister": 
        try 
        { 
         slikServer1.UnregisterServer(); 
         MessageBox.Show("Server unregistered successfully!"); 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show("Error: Could not unregister server." + "\nAdditional Information: " + ex.Message, "Unregistering Server Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
        } 
        Application.Exit(); 
        break; 
       default: 
        MessageBox.Show("This is the cmd line arg:" + args[1]); 
        break; 
      } 
     } 

    } 
+5

Переместить этот код в метод 'Main' (точка входа приложения) и не показывать форму вообще, а не выходить из чего-либо. – Sinatr

+0

@ Синат, вы говорите, чтобы создать главное? Это добавит двусмысленности с точки зрения начальной точки программы, не так ли? –

+0

У вас уже есть это ... где-то;) Не создавайте новые, используйте/модифицируйте существующие. Существует даже специальная версия: см. [Этот ответ] (http://stackoverflow.com/a/1179545/1997232). – Sinatr

ответ

2

Вы хотите:

Environment.Exit(0); 
+0

, что делает эта команда точно?Я дам ему попробовать, спасибо –

+0

@ J.Doe он убивает процесс и назначает ExitCode = 0 – Steve

+0

«Завершает этот процесс и возвращает код выхода в операционную систему». - [MSDN] (https://msdn.microsoft.com/en-us/library/system.environment.exit (v = vs.110) .aspx) – ThePerplexedOne

0

Вы можете использовать Environment.Exit(0). Ненулевые коды выхода указывают на ошибку.

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

Отличие от Application.Exit() становится понятным при рассмотрении документации.

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

Но обратите внимание на Environment.Exit(), так как он мгновенно убивает процесс. Вы можете выяснить, почему Application.Exit() не может закрыть ваше приложение.

+0

Все еще загружает form1 для меня, когда я использую Environment.Exit :( –

+0

nevermind no it does work work thanks :) –

0

Вы действительно не хотите этот код в конструкторе формы. Вместо этого найдите свою точку входа (обычно статический метод Main в файле Program.cs) и поместите его туда.

Application.Exit уже немного плохой знак - это показывает, что вы действительно не знаете, что вы пытаетесь выйти в этот момент. Причина, по которой не работает в вашем случае является то, что нет приложения для выхода еще - обычный путь запускается WinForms приложение выглядит примерно так:

Application.Run(new Form1()); 

Поскольку вы в виде конструктора, Application.Run Бесполезный 't запустить еще, так что нет контура сообщений для выхода (что и делает Application.Exit).

У вас также будет прямой доступ к аргументам командной строки из точки входа - это аргумент метода Main. Делайте все свои решения там, и только если вы хотите запустить приложение GUI, сделайте Application.Run. В противном случае просто вернитесь с Main, и ваше приложение закончится (при условии, что вы не разворачиваете нити переднего плана, которые все еще живы в этой точке).

Смежные вопросы