Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 3.0 线程概念_C# 3.0_Multithreading - Fatal编程技术网

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并且文件被另一个进程锁定,请在等待一段时间后重试该操作。如何执行该操作,因为我无法按照您告诉我的那样执行