C# 3.0 线程概念
有人能帮我吗C# 3.0 线程概念,c#-3.0,multithreading,C# 3.0,Multithreading,有人能帮我吗 private Thread workerThread; private EventWaitHandle waitHandle; if (workerThread == null) { workerThread = new Thread(new ThreadStart(Work)); workerThread.Start(); //wo
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事件,只有当新文件被添加到该文件夹时才会触发,现在的问题是它只是更大应用程序的一小部分,当file watcher触发时,有另一个进程正在访问该文件,我得到错误,就像这个文件正在被另一个进程使用。因此,我尝试通过线程实现,但是使用上面的代码,只有一些文件正在被处理,但是在日志中,我可以看到所有文件都在被处理。这是正确的方法还是我遗漏了什么
感谢您的帮助。您必须使用互斥锁来控制谁在访问文件,并且一次只允许一个进程在第一次使用该文件。如果您认为可能会有多个线程等待处理同一个文件,那么您必须使用队列实施生产者-消费者线程系统 以下是有关.NET中线程的最佳文档:
是的,但这不是我的问题,看,我有一个应用程序是大应用程序的一部分,现在我必须找出其他应用程序是否正在访问同一个文件,如果是,那么我必须等待该文件发布,然后处理该文件。请参见,我有一个仅在创建文件时触发的文件监视程序事件,因此在该特定文件夹中,两个进程正在尝试访问同一文件,因此我必须等待另一个进程完成,然后处理排队的文件。我是否必须使用线程,因为我对此不太熟悉。@user280154如果您认为没有源代码的其他进程正在访问同一个文件,那么这与线程无关。您必须尝试执行您的操作,如果引发IOException并且文件被另一个进程锁定,请在等待一段时间后重试该操作。如何执行该操作,因为我无法按照您告诉我的那样执行