首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程概念

线程概念
EN

Stack Overflow用户
提问于 2010-03-10 20:57:47
回答 1查看 175关注 0票数 2

有没有人能帮我一下:

代码语言:javascript
复制
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中谢谢。

EN

回答 1

Stack Overflow用户

发布于 2010-03-10 21:30:51

您必须使用互斥来控制谁在访问该文件,并且在第一时间只允许一个进程使用该文件。如果您认为有可能会有多个线程等待使用同一个文件,那么您将不得不使用队列实现一个producer-consumer线程系统。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2416982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档