有人可以帮我解决这个问题:
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事件,只有当新文件被添加到该文件夹时才会触发,现在问题是它是较大应用程序的一小部分,当文件观察者触发时,还有另一个访问该文件的进程,我得到像这个文件的错误被另一个进程使用。所以我试图通过线程实现,但使用上面的代码只处理一些文件,但在日志中我可以看到正在处理所有文件。这是正确的方式吗或我错过了什么
谢谢你。
答案 0 :(得分:3)
您必须使用互斥来控制访问该文件的人员,并且一次只允许一个进程在该文件中使用该文件。如果您认为有多个线程可能会等待使用同一个文件,则您必须实现生成者 - 消费者线程系统,其中队列
以下是您可以在.NET中找到的有关线程的最佳文档: