多线程事件处理程序

Der*_*rek 1 c# multithreading

这是我的单线程代码:

OnStart 
{
 FileSystemWatcher Watcher = new FileSystemWatcher();
 Watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite |NotifyFilters.CreationTime | NotifyFilters.DirectoryName;
 FileActionHandler ActionHandler = new FileActionHandler();
 Watcher.Created += new FileSystemEventHandler(ActionHandler.onCreate);
}

onCreate(object source,FileSystemEventArgs e)
{
 try
 {
 FileInfo file = new FileInfo (e.FullPath);
 String output = <FileName>File.Name + <FullPath>File.FullName + <FileSize>File.Length +  <CreationTime>File.CreationTime + <LastAccess>File.LastAccess + <LastWriteTime>File.LastWriteTime;
 LogToTextFile(output);
 }
 catch
 {
 LogToTextFile(ex.GetBaseException().Message);
 }
}

private void LogToTextFile(String s)
{
FileStream fileStream = new FileStream(@"c:\Log.txt", FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fileStream);
sw.WriteLine(s);
sw.Flush();
sw.Close();
fileStream.Close();
}
Run Code Online (Sandbox Code Playgroud)

问题:我想在C#中使用多线程进行事件处理?Simply,what I mean is to start a new thread to handle for each of the events raised. 我该怎么做呢?请帮我解决这个紧迫的问题......

Pie*_*gny 7

这里有一个小片段,用于在每次收到事件时创建任务并多线程处理事件处理程序:

Watcher.Created += new FileSystemEventHandler(onCreateMultiThreaded);

onCreateMultiThreaded(object source, FileSystemEventArgs e)
{
    Task.Factory.StartNew(() => onCreate(source, e));
}
Run Code Online (Sandbox Code Playgroud)

这是线程池解决方案的简写:

ThreadPool.QueueUserWorkItem(s => onCreate(source, e));
Run Code Online (Sandbox Code Playgroud)

使用线程池将允许您重复使用线程而不是每次都创建新线程,这将使您的应用程序更快(消除创建新线程的开销.)