有人可以帮我解决这个问题吗:
private Thread workerThread;
private EventWaitHandle waitHandle;
if (workerThread == null)
{
workerThread = new Thread(new ThreadStart(Work));
workerThread.Start();
//workerThread.Join();
}
else if (workerThread.ThreadState == ThreadState.WaitSleepJoin)
{
waitHandle.Set();
}
private void Work()
{
while (true)
{
string filepath = RetrieveFile();
if (filepath != null)
ProcessFile(filepath);
else
// If no files left to process then wait
waitHandle.WaitOne();
}
}
private void ProcessFile(string filepath)
{
XMLCreation myXML = new XMLCreation();
myXML.WriteXml(filepath, XMLFullFilePath);
}
private string RetrieveFile()
{
if (workQueue.Count > 0)
return workQueue.Dequeue();
else
return null;
}
看看这就是这一切的工作原理。
我有一个文件观察器事件,仅当新文件添加到该文件夹时才会触发,现在的问题是它是较大应用程序的一小部分,当文件观察器触发时,有另一个进程正在访问该文件,我得到类似此文件正在被另一个进程使用的错误。所以我尝试通过线程来实现,但使用上面的代码只处理一些文件,但在日志中我可以看到所有文件都在处理。这是正确的方法还是我遗漏了一些东西
感谢副词。
最佳答案
您必须使用互斥体来控制谁正在访问该文件,并且一次只允许一个进程在第一次使用该文件。如果您认为可能有多个线程正在等待处理同一个文件,那么您将必须使用队列实现一个生产者-消费者线程系统>.
以下是您可以在 .NET 中找到的有关线程的最佳文档:
关于c#-3.0 - 线程概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2416982/