これが冗長である場合は申し訳ありませんが、これに関連するすべての質問は異なる方向を指しているようです。また、マルチスレッドプログラミングは初めてです。
私FileSystemWatcher
のコードには、作成されたイベントを監視するクラスがあります。ファイル システム ウォッチャーの作成されたイベントが独自のスレッドを開始するようです。FileSystemWatcher
そのため、作成されたイベントの呼び出されたスレッドで開始された作業が終了する前に、呼び出しスレッドが作業を継続することがあります。私はこれをしたくありません。私のワークフローはシングルスレッドである必要があるため、呼び出し元のスレッドが再開する機会を得る前に、作成されたイベントが作業を終了するのを待ちます。
擬似コード:
main() {
FileSystemWatcher fsw = new FileSystemWatcher()
fsw.Path = ini.location;
fsw.Created += new FileSystemEventHandler(OnFileCreation);
fsw.EnableRaisingEvents = true;
main_engine.processDataToFile();
main_engine.processCreatedFile();
}
void OnFileCreation(object sender, FileSystemEventArgs e) {
// do some file processing
// takes time based on size of file and whether file is locked or not etc.
}
void processDataToFile() {
// do some data processing on received data and output to a file.
}
void processCreatedFile() {
// do not want this method to be called, unless OnFileCreation() finish it's work.
}
使用することを選択した理由FileSystemWatcher
は、main_engine が最初にデータを取得するのではなく、処理のためにファイルが直接配置されることがあり、それが複数の場所で機能するため、利用可能になったときに独自のソリューションを展開したくありませんでしたFileSystemWatcher
。