有没有人能帮我一下:
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;
}看,这就是这一切的工作原理。
我有一个filewatcher事件,只有当新文件被添加到该文件夹时才会触发,现在的问题是它只是一个较大的应用程序的一小部分,当文件监视器触发时,有另一个进程正在访问该文件,我得到的错误是该文件正被另一个进程使用。因此,我尝试通过线程来实现,但使用上面的代码,只有一些文件正在处理,但在日志中,我可以看到所有文件都正在处理。这是正确的做法吗?还是我漏掉了什么?
在adv中谢谢。
发布于 2010-03-10 21:30:51
您必须使用互斥来控制谁在访问该文件,并且在第一时间只允许一个进程使用该文件。如果您认为有可能会有多个线程等待使用同一个文件,那么您将不得不使用队列实现一个producer-consumer线程系统。
以下是您可以在.NET中找到的有关线程的最佳文档:
http://www.albahari.com/threading/
https://stackoverflow.com/questions/2416982
复制相似问题