2012-03-31 21 views
0

私は、あるプロセスが別のプロセスが実行中であるかどうかを確認するためのシンプルなシステムが必要です(Process.getProcessByNameなどを使用してその問題を解決できます)です。他のプロセスの基本イベントをトリガーする

イベントをトリガーするとは、文字通りそれを意味するものではありません。私は、最初のプロセスのサブを2番目のプロセスからトリガーするだけです。

このようなIPCは通常パイプやリモーティングなどで行われますが、私はこれらの経験がなく、簡単なソリューションを探していますので、これを比較的簡単に解決できなければ私は午前中です代替案を探しています。

これが明確でない場合は、詳細を追加します。

EDIT:両方のプロセスが同じマシンで実行されます。あなたの助けのための

おかげで、

サム。

答えて

1

.NETでは、WCFを使用することをお勧めします。 WCFは、Webサービスだけでなく、それらが同じマシンであるか異なるマシンであるかに関係なく、プロセス間の通信に使用されます。 WCFサービスの経験があれば、これが最も簡単な解決策です。ここではこの方法を説明するチュートリアルでは、次のとおりです。

申し訳

http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication

私は電話でこれを書いているいずれかの例を記述しないでください。お役に立てれば!

+0

おかげで、これは素晴らしい作品。 – SeriousSamP

2

ここでは、待機ハンドルを使用する非常に簡単な方法があります。取り消しコードをすべて削除した方が簡単です。HandleMessageスレッドをキャンセルする必要がない場合は、必ずしも必要ではありません。

アプリケーション1(シグナリングAPP)

public partial class MainWindow : Window 
{ 
    readonly EventWaitHandle _waitHandle = 
     new EventWaitHandle(false, EventResetMode.AutoReset, 
      "3bee6ac3-2b48-4515-82f5-4fee255a674e"); 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     _waitHandle.Set(); 
    } 
} 

アプリケーション2(シグナリングAPP)

public partial class MainWindow 
{ 
    private readonly EventWaitHandle _waitHandle = 
     new EventWaitHandle(false, EventResetMode.AutoReset, 
     "3bee6ac3-2b48-4515-82f5-4fee255a674e"); // a unique name 
    private readonly CancellationToken _token; 
    private readonly CancellationTokenSource _tokenSource; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     _tokenSource = new CancellationTokenSource(); 
     _token = _tokenSource.Token; 

     Task.Factory.StartNew(HandleMessage, _token); 
    } 

    private void HandleMessage() 
    { 
     while(!_token.IsCancellationRequested) 
     { 
      // wait for signal - but only for 1 second 
      // so we can check for cancellation 
      if (_waitHandle.WaitOne(1000)) 
      { 
       Debug.WriteLine("Message received"); 
      } 
     } 

     Debug.WriteLine("Cancelled"); 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     // stop receiving 
     _tokenSource.Cancel(); 
    } 
} 
+0

ありがとう、私はこれまでの答えのシステムがうまくいかないかどうか調べます。しかし、私はすでにそれを実装しており、私は簡単にテストされているにもかかわらず、うまくいくようです。 – SeriousSamP

関連する問題