【问题标题】:Incorporate multi-threading for FileSystemWatcher Service为 FileSystemWatcher 服务合并多线程
【发布时间】:2012-01-07 05:52:48
【问题描述】:

当我收到来自 FileSystemWatcher 的通知时,我想启动一个单独的线程来处理进一步的处理。

如何在 FileSystemWatcher 服务中进行多线程处理以进行事件处理?

【问题讨论】:

  • 你试过什么?什么不起作用?任何错误消息/异常?请显示一些源代码...
  • 问题是我对多线程一无所知,我还没有编写任何代码。
  • 我认为您至少编写了单线程版本?表明...
  • 请参考我的另一个问题以获取单线程版本的参考。 stackoverflow.com/questions/7184472/fileinfo-exceptions
  • fromt hat 问题似乎单线程版本无法正常工作 - 我建议先修复它,然后寻找如何使其成为多线程!

标签: multithreading filesystemwatcher


【解决方案1】:

我不明白为什么人们无法回答这个简单的问题。对于其他对此感到疑惑的人,这里是一种这样做的方法:

class Program
{
    static void Main(string[] args)
    {
        FileSystemWatcher fsw = new FileSystemWatcher();
        fsw.Path = @"C:\temp\";
        fsw.Created += new FileSystemEventHandler(onCreatedFile);
        fsw.EnableRaisingEvents = true;

        Console.ReadLine();
    }

    private static void onCreatedFile(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine("Thread " + AppDomain.GetCurrentThreadId() + " detected " + e.FullPath);

        Thread t = new Thread(new ParameterizedThreadStart(seperateThread));
        t.Start(e);
    }

    private static void seperateThread(object obj)
    {
        FileSystemEventArgs e = (FileSystemEventArgs)obj;

        Console.WriteLine("Thread " + AppDomain.GetCurrentThreadId() + " detected " + e.FullPath);
    }
}

【讨论】:

  • 根据对这个问题的回答 (stackoverflow.com/questions/11492720/…),对于 FileSystemWatcher 是否在新线程上引发事件似乎存在一些分歧。我猜这取决于。
  • @jpierson 事件处理程序可能在一个新线程上,但仍将依次处理每个事件,即在前一个事件完全处理之后。有了上面的答案,每个事件都将在另一个新线程中处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多