线程概念

时间:2010-03-10 12:57:47

标签: c#-3.0 multithreading

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

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

谢谢你。

1 个答案:

答案 0 :(得分:3)

您必须使用互斥来控制访问该文件的人员,并且一次只允许一个进程在该文件中使用该文件。如果您认为有多个线程可能会等待使用同一个文件,则您必须实现生成者 - 消费者线程系统,其中队列

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

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