8

ftp サーバーとの同期に時間がかかるコンソール アプリが 1 つあります。
別のコンソール アプリは、いくつかの必要な更新済みファイルを含むローカル ファイル システムを準備します。
次に、2 つ目は最初のディレクトリ名が終了するのを待ってから、最終的なディレクトリ名を交換して、Web 上で表示されるようにします。

私は、同期アプリが 2 番目のアプリに仕事が終わったことを伝えるための最良の方法を探しました。これには、 Data Copy for IPC を使用するのが最適なソリューションのようです。

質問は 2 つあります。

  • 私は正しいですか?同じ結果を得るより簡単な方法はありますか?
  • これを行う管理された (.net) 方法はありますか?
4

2 に答える 2

11

一方のアプリケーションがタスクを完了したことを他方のアプリケーションに通知するだけでよい場合は、名前付きの EventWaitHandle を使用するのが最も簡単な方法です。オブジェクトは非シグナル状態で作成されます。最初のアプリはハンドルを待機し、2 番目のアプリはジョブの完了時にハンドルを通知します。例えば:

// First application
EventWaitHandle waitForSignal = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle");

// Here, the first application does whatever initialization it can.
// Then it waits for the handle to be signaled:
// The program will block until somebody signals the handle.
waitForSignal.WaitOne();

これにより、最初のプログラムが同期を待機するように設定されます。2 番目のアプリケーションも同様に単純です。

// Second app
EventWaitHandle doneWithInit = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle");

// Here, the second application initializes what it needs to.
// When it's done, it signals the wait handle:
doneWithInit.Set();

2 番目のアプリケーションが Set を呼び出すと、イベントが通知され、最初のアプリケーションが続行されます。

于 2009-01-26T17:54:13.167 に答える
5

IPC のその他の一般的なオプションには、次のものがあります。

  • 名前付きパイプ
  • リモート処理 (.NET)
  • WCF

同期のみが必要な場合は、、SemaphoreまたはMutexオブジェクトを検討できます。System.Threading.NET の名前空間に存在するクラスがあります。これらの名前付きバージョンを作成すると、マシン全体に適用されます。

于 2009-01-26T16:44:59.250 に答える