両方のプロセスのコードを変更できると言うと、EventWaitHandleを使用してプロセス間で通信できます。
ファイルを作成するプログラムでは、Main()メソッドでEventWaitHandleを作成し、プログラムが終了するまでそれを保持できます。ProgramでEventWaitHandleオブジェクトを渡して、ファイルを作成するコードで使用できるようにする必要があります(または、ファイル作成コードがイベントを設定するために呼び出すことができるメソッドを提供します)。
using (EventWaitHandle readySignaller = new EventWaitHandle(false, EventResetMode.ManualReset, "MySignalName"))
{
// Rest of program goes here...
// When your program creates the file, do this:
readySignaller.Set();
}
次に、ファイルを待機しているプログラムに次のようなコードを追加します。
// Returns true if the wait was successful.
// Once this has returned true, it will return false until the file is created again.
public static bool WaitForFileToBeCreated(int timeoutMilliseconds) // Pass Timeout.Infinite to wait infinitely.
{
using (EventWaitHandle readySignaller = new EventWaitHandle(false, EventResetMode.ManualReset, "MySignalName"))
{
bool result = readySignaller.WaitOne(timeoutMilliseconds);
if (result)
{
readySignaller.Reset();
}
return result;
}
}
注:正常に待機した場合は、信号をリセットしていることに注意してください。他のプロセスが信号を再度設定するまで、信号はリセットされたままになります。必要に応じて、ロジックを別の方法で処理できます。これは単なる例です。
基本的に、ここで(論理的に)行っているのは、2つのプロセス間でブール値を共有することです。その共有ブール値を設定およびリセットする順序に注意する必要があります。