C# 如何等待filesystemwatcher事件完成
如果这是多余的,请原谅,但是所有与此相关的问题似乎都指向不同的方向,而且我是多线程编程的新手 我的代码中有一个C# 如何等待filesystemwatcher事件完成,c#,multithreading,filesystemwatcher,C#,Multithreading,Filesystemwatcher,如果这是多余的,请原谅,但是所有与此相关的问题似乎都指向不同的方向,而且我是多线程编程的新手 我的代码中有一个FileSystemWatcher类,它监视创建的事件。它看起来像是文件系统观察者创建的事件启动了它自己的线程。因此,有时调用线程会在FileSystemWatchercreated事件的被调用线程中启动的工作完成之前继续它的工作。我不要这个。我的工作流需要是单线程的,所以我想要实现的是等待创建的事件完成它的工作,然后调用线程才有机会恢复 比苏多代码: main() { FileSyst
FileSystemWatcher
类,它监视创建的事件。它看起来像是文件系统观察者创建的事件启动了它自己的线程。因此,有时调用线程会在FileSystemWatcher
created事件的被调用线程中启动的工作完成之前继续它的工作。我不要这个。我的工作流需要是单线程的,所以我想要实现的是等待创建的事件完成它的工作,然后调用线程才有机会恢复
比苏多代码:
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
的原因是,有时文件直接放置以进行处理,而不是由主引擎首先获取数据,并且它可以在多个位置工作,因此当FileSystemWatcher
可用时,不想推出一个自主开发的解决方案 如果事件在单独的线程中触发,则不能使其成为单线程。因为这不是你的代码。故事结束了
但是,等待很简单:
...
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);
您试图监视哪些事件。。看看here@DJKRAZE:OP显示“已创建”。
watcher.Created+=newfilesystemeventhandler(OnChanged)代码>这是我发布的链接的一部分…所以罗伯特·哈维不确定你在说什么。@DJKRAZE:他正试图监控创建的事件。非常密切相关: