2016-08-02 9 views
0

私は自分のアプリケーションのメインエントリポイントを持つProgram.csにこのExitedイベントを持っています。別の外部プログラムを開き、その状態を監視します。この外部プログラムが終了すると、最初に開くフォーム上にダイアログボックスが表示されます。私は終了したイベントをキャプチャする方法を知っていますが、私は実行したいアクションで別のフォームで関数を呼び出したり実行したりする必要があります。C#Winforms:メインProgram.csから呼び出されたフォームに関数を含めることは可能ですか?

public static class Program 
{ 
    public static void ExternalProgramFunction() 
    { 
     System.Diagnostics.Process startExternal = System.Diagnostics.Process.Start("external.exe", String.Format(ConnectionArg)); 
     startExternal.EnableRaisingEvents = true; 
     startExternal.Exited += ExternalProgramExits; 
    } 

    public static void ExternalProgramExits(object sender, EventArgs e) 
    { 
     if (UserClose == false) 
     { 
      /// Need code here to open dialog box on another form!!! 
     } 
    } 
    /// The main entry point for the application. 
    [STAThread] 
    static void Main(string[] arguments) 
    { 
     UserClose = false; 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Manager()); 

このコードでは、次のような別の形式の関数を実行します。私は、ダイアログボックスが開き、フォームをクリックできないようにするためにこれを行います。私が下に挙げたのは、他の形式のコードの一部です。私はProgram.csからprematureclosepopupを実行したい

public Manager() 
    { 
     InitializeComponent(); 
    } 
    public void PrematureClosePopup() 
    { 
     ManagerWarning messagepopup = new ManagerWarning(); 
     messagepopup.ShowDialog(); 
    } 

答えて

-1

あなたがしようとしているものは何もありません。ホストアプリケーションにTCPソケットを実装させて、起動した他のアプリケーションがTCPクライアントとして動作し、コマンドを送信して、「はい」または「いいえ」と答えた場合は応答を得ることができます。あなたが "external.exe"プログラムを何も制御していない場合、これは動作しません。

+0

お互いに話す必要のあるアプリケーションは2つありません。 OPが行っているのは、同じアプリケーションのフォーム上でメソッドを呼び出すことだけです。 – itsme86

0

あなたは自分のManagerオブジェクトへの参照を保持する必要があります。

static Manager _someClassMemberVariable; 

その後にMain()の最後の行を変更:

_someClassMemberVariable = new Manager(); 
Application.Run(_someClassMemberVariable); 

その後、あなたはあなたのExternalProgramExits()方法を変更することができます

public static void ExternalProgramExits(object sender, EventArgs e) 
{ 
    if (UserClose == false) 
    { 
     _someClassMemberVariable.PrematureClosePopup(); 
    } 
} 
+0

私は明日これを打つつもりです。ありがとう! –

+0

私はこれをもう一度見ていました。どこに置くのですか? 静的マネージャ_someClassMemberVariable; public static class Programまたはstatic void Main(string [] arguments)の下にありますか? –

+0

'Program'クラスの一番上の項目です。 'public static void ExternalProgramFunction()'の行のように、 – itsme86

関連する問題