Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何等待filesystemwatcher事件完成_C#_Multithreading_Filesystemwatcher - Fatal编程技术网

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:他正试图监控创建的事件。非常密切相关: