这是我的单线程代码:
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.
我该怎么做呢?请帮我解决这个紧迫的问题......
这里有一个小片段,用于在每次收到事件时创建任务并多线程处理事件处理程序:
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)
使用线程池将允许您重复使用线程而不是每次都创建新线程,这将使您的应用程序更快(消除创建新线程的开销.)