2

如果这是多余的,请原谅,但是与此相关的所有问题似乎都指向不同的方向,我也是多线程编程的新手。

我的代码中有一个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可用时推出本土解决方案。

4

1 回答 1

1

如果事件在单独的线程中触发,则不能使其成为单线程。因为这不是你的代码。故事结局。

但是等待很简单:

...
    me.WaitOne();
    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.
...
me.Set();
}

ManualResetEventSlim me = new ManualResetEventSlim(false);
于 2013-02-02T04:24:48.437 回答