2017-01-24 28 views
0

私は2つの異なるアプリケーションを同時に実行しています。一つは、それが二番目のメインフォームがありProcess.CloseMainWindow()はForm.Closingイベントを発生させません。

を開始し、最初のアプリケーションをリセットする薬剤である 隠されたまましなければならないので、このアプリケーションは、自己のホストサーバーでのみ通知アイコンの形 なしタスクバーアイコンで隠されたフォームを持つアプリケーションであり、イベントハンドラは、それに追加:

public Form1() 
    { 
     this.FormClosing += Form1_FormClosing; 
    } 

    private void doDispose() { 
     //Takes time to disconnected 
     //about 1 seconds delay 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     doDispose(); 
    } 

エージェントアプリケーション(アプリのリセットアクションを呼び出す)

private void resetApp() { 
        var process = //get process from Prcesses collection 
         try 
         { 


          process.CloseMainWindow(); <- not raising closing event in the main form 
          process.WaitForExit(1000); 
          process.Close(); 
         } 
         catch 
         { 
         } 

    } 

からのコード私は別の記事からいくつかのことを試してみました。メインモデルにはprocess.MainWindowHandleを使用してアクセスしますが、フォームが非表示になっているため常にゼロが返されます。

PS - 隠しフォームを手動で最初のアプリを閉じると、イベントが発生し、切断プロセスが必要に応じて実行されます。フォームを閉じる方法に応じて

おかげ

+0

感謝を - しかし、そのない2アプリケーション最初のアプリケーションを終了する必要があるエージェント同じアプリケーション – Izikon

答えて

0

動作しない第二の薬剤のアプリケーションからそれを閉じると、それがまたはwmCloseでForm.csのソースを参照して、Closingイベントを起動しない場合があり()

http://www.dotnetframework.org/default.aspx/[email protected]@1/[email protected]@1/[email protected]@1/DEVDIV/depot/DevDiv/releases/whidbey/NetFXspW7/ndp/fx/src/WinForms/Managed/System/WinForms/[email protected]/1/[email protected]

Disposeメソッドをオーバーライドしましたか?

public class MyForm : Form 
{ 
    // ... 


    protected override void Dispose(bool disposing) 
    { 
     // your code 
     base.Dispose(disposing); 
    } 
} 
+0

に - 手動でイベントが処分をオーバーライドしてみ – Izikon

+0

作品最初のアプリケーションを閉じるときに() – galister

関連する問題