2012-02-15 8 views
0

ウィンドウを閉じたときに私の血な通りのプロセスが終了しないのを2時間以上見た後。私は最終的にそれがメインウィンドウの問題であることを発見しました(スレッドではなく、問題でもある可能性があります)。しかし、私はまだそれがなぜバグかわからない。ウィンドウを閉じるバグまたはe.cancel = falseでもシャットダウンしました。

ので、このコードは、バグます:

private void Window_Closing(object sender, CancelEventArgs e) 
{ 
    try 
    { 
     MessageBox.Show(e.Cancel.ToString()); // False always 

     if (formcontroler.formchampinfo != null) // THIS IS NULL so it won t go into this IF 
     { 
      formcontroler.formchampinfo.Close(); // never gets here so it doesn t matter what this do right ? 
     } 

     MessageBox.Show(e.Cancel.ToString()); // always false, just to check or it would get to this part tbh 
    } 
    catch (Exception ex) 
    { 
     throw (ex); // never gets thrown 
    } 
} 

(私には)本当に不思議です!それは2番目のメッセージボックスとe.cancel = FALSEになるので、キャンセルしてはならず、シャットダウンしてプロセスを終了させる必要があります(Visual Studioはデバッグを停止する必要があります)。

とにかく停止しません。

private void Window_Closing(object sender, CancelEventArgs e) 
{ 
    try 
    { 
     MessageBox.Show(e.Cancel.ToString()); // False always 

     if (true == true) // just To test ofc 
     { 
      int lol = 5; 
      lol++; 
     } 

     MessageBox.Show(e.Cancel.ToString()); // always false, just to check or it would get to this part tbh 
    } 
    catch (Exception ex) 
    { 
     throw (ex); // never gets thrown 
    } 
} 

、それが動作し、そのようなプログラムの終了は、(プロセスが殺されている必要があります。それはちょうど私があれば真ん中を削除するかのような単純なものと交換した場合、プロセス人工生命と私は見当もつかない理由を持っていない保ちます。()formchampinfo =新しいfrmchaminfo(のような;)と、Visual Studioがデバッグを停止しmattterトンをshoudn

いくつかの側のコード私は

class formcontroler 
{ 
    public static frmchampinfo formchampinfo; 
} 

frmchampinfoがウィンドウですが、気圧、私はそれをロードしたり、それをdeclaterded考えます これはバグですか?ここで何が起こったのですか?私のコードでシャットダウンしたのはなぜですか?

私はトン7時間まで、それに答えることができますが、その後、私は眠っています。(私ドンtはまだ100担当者を得ましたので)申し訳ありません解決しよう

おけば深く深く見た後、私は、IF文が作成していることが分かったので、私formcontrollerクラスの他のフォーム(あなたがそれを把握トンcoudnので、申し訳ありませんが、私はトンの答えで完全なコードを提供しなかったの):

class formcontroler 
     { 
      public static frmchampinfo formchampinfo; 
      public static Window activeform; 
      public static frmlog formlog = new frmlog(); 
    //... more code blabla 
     } 

formlogは、ここでは「作られます」。 formcontroller.formlog.close()をコードに追加すると、完全に閉じることができます。

private void Window_Closing(object sender, CancelEventArgs e) 
     { 
      try 
      { 
       MessageBox.Show(e.Cancel.ToString()); // False always 
       if (formcontroler.formchampinfo != null) // THIS IS NULL so it won t go into this IF 
       { 
        formcontroler.formchampinfo.Close(); // never gets here so it doesn t matter what this do right ? 

       } 
       formcontroler.formlog.Close(); // THIS FIXED IT... lame sorry for all your time. HoweveR I have learned something hope you did too. 
       MessageBox.Show(e.Cancel.ToString()); // always false, just to check or it would get to this part tbh 
      } 
      catch (Exception ex) 
      { 
       throw (ex); // never gets thrown 
      } 
     } 
+0

あの、あなたは誰もがあなたを助けることができるようにするための情報の最も重要な部分を残しました。 'formcontroler'、' formchampinfo'、および 'formchampinfo.Close()' –

+0

フォームを宣言し、終了イベントを処理する方法のコードをすべて投稿してください。 – Turbot

+0

ifに情報を追加しました。彼が決してそこに行かない場合は最初の情報です。そして、私はこのフォームをどのように宣言しますか?これは、ビジュアルスタジオからの "自動スタートフォーム"である単なるウィンドウです。 – Maximc

答えて

1

あなたのAppクラスのShutdownModeOnMainWindowCloseに設定されているかどうかを確認します。

次の方法でも、明示的にシャットダウンアプリケーションことができます。

Application.Current.Shutdown(); 
関連する問題