gpt4 book ai didi

c#-3.0 - 线程概念

转载 作者:行者123 更新时间:2023-12-03 12:57:42 25 4
gpt4 key购买 nike

有人可以帮我解决这个问题吗:

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 事件,只有在将新文件添加到该文件夹​​时才会触发,现在问题是它是更大应用程序的一小部分,当文件观察器触发时,另一个进程正在访问该文件,我收到这样的错误文件正被另一个进程使用。所以我试图通过线程来实现,但上面的代码只处理了一些文件,但在日志中我可以看到所有文件都在处理。这是正确的方法还是我遗漏了什么

谢谢。

最佳答案

您将不得不使用 互斥锁控制谁正在访问该文件,并在第一次只允许一个进程使用该文件。如果您认为可能有多个线程在等待处理同一个文件,那么您必须实现 生产者-消费者 的线程系统队列 .

以下是您可以在 .NET 中找到的有关线程的最佳文档:

http://www.albahari.com/threading/

关于c#-3.0 - 线程概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2416982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com