Концепция потоков - PullRequest
       7

Концепция потоков

2 голосов
/ 10 марта 2010

Может ли кто-нибудь помочь мне в этом:

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.

1 Ответ

3 голосов
/ 10 марта 2010

Вам придется использовать мьютекс , чтобы контролировать, кто обращается к файлу, и разрешить только одному процессу одновременно работать с этим файлом в самый первый раз. Если вы считаете, что существует вероятность того, что более одного потока будут ожидать работы с одним и тем же файлом, вам придется внедрить систему потоков производитель-потребитель с очередью .

Вот лучшая документация о потоках, которую вы можете найти в .NET:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...