2016-11-30 11 views
0

私のフォームコンストラクタでは、私は引数のチェックを持っています。私は2つの特別な引数のいずれかを取得した場合、私は単に私のサーバーを登録/登録解除し、プログラムを閉じるだけです。私はこれらのインスタンスにフォームをロードしたくありません。しかし、現在のところ、次のコードはサーバーの登録/登録解除に成功していますが、直後にアプリケーションを終了させることはありません。そうするための他のコマンド?それとも、私がやろうとしていることをするためのより良い方法がありますか?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

@Sinatrあなたはメインを作成すると言っている?それはプログラムの出発点ではあいまいではないでしょうか? –

+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

Environment.Exitを使用するとまだ私のためにform1がロードされます:( –

+0

nevermindいいえそれは仕事をありがとう:) –

0

このコードをフォームコンストラクタで実際に使用する必要はありません。代わりに、あなたのエントリーポイントを見つけて(通常はファイル内の静的なMainメソッド)、それをそこに置きます。

Application.Exitは既に悪い兆候です。その時点で何を終了しようとしているのか分かりません。それはあなたのケースでは動作しません理由はまだ終了する何のアプリケーションがありませんということです - WinFormsのアプリケーションが起動され、通常の方法では、このようなものになります。あなたは、フォームのコンストラクタ、Application.Runのdidnにいるので

Application.Run(new Form1()); 

をまだ実行されていないので、終了するメッセージループはありません(これはApplication.Exitの機能です)。

また、エントリポイントからのコマンドライン引数に直接アクセスできます。これはMainメソッドの引数です。 GUIアプリケーションを実際に実行する場合にのみ、すべての決定を行います。Application.Runを実行してください。それ以外の場合は、Mainから戻り、アプリケーションは終了します(ただし、その時点でまだアクティブなフォアグラウンドスレッドをスピンアップしなかった場合)。

関連する問題