2

プロセス1がプロセス2でイベントを発生させ、いくつかの引数を送信して、特定のアクションを実行するように2番目のプロセスに通知し、オプションで応答を受信できるようにする方法は?

ファイルシステムを使用してこれを行うことは可能です.process-1がいくつかのコマンド/クエリをダンプし、process-2がそのファイルから常に読み取りを行うファイルが存在する可能性がありますが、この解決策は適切ではありません.

それを行う他の方法はありますか?

(VB.netでは、プロジェクトのプロパティで「単一インスタンス」が有効になっている場合、新しいプロセスが開始されるたびに実行中のプロセスでイベントを簡単に発生させることができます)

4

3 に答える 3

2

名前付きEventWaitHandleを使用して、プロセス間の同期を実現できます。

于 2013-03-16T17:37:26.837 に答える
1

この記事は、あなたが慣れ親しんだことをしているようですvb.net single instance(そして、それはまだ実行可能なオプションのようです)。

要するに、単一インスタンスのようなソリューションを実現するには、3 つのアプローチがあるようです。

  • ミューテックスを使用する
  • プロセス リストを循環して、同じ名前のプロセスが既に実行されているかどうかを確認します。
  • 単一インスタンス アプリ用の Visual Basic システムを使用します (C# からアクセスできます)。
于 2013-03-16T17:40:08.037 に答える
1

「プロセス」が「アプリ ドメイン」を意味する場合、2 つの間のイベント処理を設定するのはかなり簡単です。実際、2 つの別個のアプリ ドメインに 2 つのクラスがある場合 (各クラスには基本クラスとして MarshalByRefObject があります)、.net は自動的にリモーティング構造をセットアップし、イベントが 1 つのアプリの場合と同じように動作するように見せます。ドメイン。(例: http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx )

ただし、ここで重要なのは「表示」です。「アプリ ドメイン」と「プロセス」の分離は、リソースを意図的に分離することを目的としています。プロセスの外部にあるものにアクセスするには、共有ファイル、インターネット接続、名前付きパイプなど、オペレーティング システムの助けが本当に必要です。しかし、イベントのような .net の概念は、ランタイムの空間の外には存在しません。

つまり、両方のプロセスが同じマシン上にある場合は、Named-Pipes ( http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeserverstream.aspx ) のようなものを使用する必要があります。 、複数のシステム間で通信する場合は TCPClient/TCPListener ( http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx )、より負荷の高いものが必要な場合は WCF を使用します。

これらのテクノロジの具体的な例を実際に見たい場合は、その例を書き上げます。

于 2013-03-16T17:45:55.233 に答える