Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > Обработка поступающих файлов |
Автор: Wilko 3.3.2012, 23:19 |
Вопрос состоит в следующем. Есть директория в которую поступают текстовые файлы. Программе необходимо мониторить эту директорию и записывать информацию из файлов в базу данных. Начинал с начала, вроде бы все сделал(директорию мониторит, файл читает, в базу записывает). Осталось добавить возможность мониторинга нескольких файлов, и тут уперся в проблему, которую сам не смог решить. Файл содержит большие объемы данных(100к+ строк минимум), что значит что необходим дополнительный буфер, куда filesystemwathcer будет складывать инфу о том какие файлы поступили(для обработки). Пока я вижу это так, при евенте от fsw записывать путь к файлу в List. Но вот проблема, как мне также беспрерывно мониторить этот лист на наличие файлов для обработки внутри программы? |
Автор: Экскалупатор 4.3.2012, 12:25 |
класс который управляет листом(ты же не имеешь ввиду просто List<T> в который может писать кто угодно? если так то надо переделать) должен оповещать всех подписчиков на событие изменения листа. о том что лист изменился этот класс будет знать потому что именно он и будет менять лист(точнее всем кому надо будут менять лист через этот класс) |
Автор: Dennnis 10.4.2012, 19:14 | ||
Скорее всего тут подойдет очередь, в которую fsw будет добавлять имена файлов, а другой поток будет выгребать их из этой очереди и обрабатывать. В этом случае нужно: создать ManualResetEvent, для которого вызывать метод Set при добавлении файла в очередь. в потоке-обработчике вызывать метод WaitOne, который будет блокировать поток до тех пор пока в очередь не поступит новый файл, примерно так:
Но надо сказать сразу, что здесь нужно использовать потокобезопасную вариант очереди. |