Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 21
1

FileSystemWatcher работа с несколькими директориями в отдельных потоках

22.04.2015, 14:22. Показов 1327. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу программу, используя класс FileSystemWatcher. Необходимо организовать работу с несколькими директориями. На входе есть массив с этими самыми директориями. Суть проблемы в том, что все созданные экземпляры FileSystemWatcher ведут мониторинг за одной папкой, которая записана последней в текстовом файле с директориями. Подскажите, в чем здесь проблема?

Вот кусок кода:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
string[] lines = System.IO.File.ReadAllLines(@"C:\Audit\input.txt");  // в этом файле хранятся необходимые директории
            byte count=0; 
            Data data = new Data();  // класс для передачи данных в поток, содержит переменные типа int и string
            Thread[] threads = new Thread[10];
            for (int i = 0; i < lines.Length; i++)
            {
                data.way = lines[i];  data.count = count;     // заполняем класс data ( в поле string вписываем директорию, в поле count - номер)
                threads[count] = new Thread(create_new_watcher); // функция create_new_watcher описана ниже
                threads[count].Name = "Thread " + (count + 1);
                threads[count].Start(data);
                count++; 
            }
 
private static void create_new_watcher(object data)
        {
            Data obj = (Data)data; int i = obj.count; string way = obj.way;
            Console.WriteLine(obj.way); Console.WriteLine(obj.count);
            elements[i] = new FileSystemWatcher(way);
            elements[i].NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;
 
            elements[i].Renamed += new RenamedEventHandler(OnRenamed);
            elements[i].Deleted += new FileSystemEventHandler(OnChanged);
            elements[i].Created += new FileSystemEventHandler(OnChanged);
            elements[i].Changed += new FileSystemEventHandler(OnChanged);
            elements[i].EnableRaisingEvents = true;
 
            while (true) ;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2015, 14:22
Ответы с готовыми решениями:

Работа контролов в отдельных потоках
Имеется приложение-хост (проект WPF) к которому цепляем разные контролы (в DLL) у контролов есть...

Наблюдение за несколькими папками (FileSystemWatcher)
Поставили передо мной непростую задачу. Необходимо организовать одновременное наблюдение за...

Заполнение массивов в отдельных потоках
Всем доброго времени суток. Вопрос касается потоков в c#. написал говнокод небольшую консольную...

Запуск функци в отдельных потоках
Здравствуйте. Подскажите пожалуйста, возможно ли запустить функции funkA, funkB, funkC в разных...

2
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
22.04.2015, 14:25 2
Цитата Сообщение от Zugmashine Посмотреть сообщение
в чем здесь проблема?
Проблема в том, что вы один раз создали экземпляр Data и потом просто перезаписываете в нем значения.
В результате на момент запуска всех потоков они будут работать фактически с одним объектом.

Перенесите создание Data в цикл:
C#
1
2
3
            for (int i = 0; i < lines.Length; i++)
            {
            Data data = new Data();  // класс для передачи данных в поток, содержит переменные типа int и string
1
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 21
22.04.2015, 14:36  [ТС] 3
Спасибо Все получилось
0
22.04.2015, 14:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2015, 14:36
Помогаю со студенческими работами здесь

OpenMP выполнение процедур в отдельных потоках
Есть две независимые процедуры. Требуется выполнить их в отдельных потоках. Вопрос: как это сделать...

Тщательное пингование подсети в отдельных потоках
Здравствуйте. Необходимо пропинговать подсеть и получить список всех активных хостов с их...

Запуск методов класса в отдельных потоках
Столкнулся со следующей проблемой. Есть некий класс, методы которого должны выполняться каждый в...

Вычисление контрольной суммы файлов в отдельных потоках
Помогите,пожалуйста,искал в интернете,что то подобное,толком ничего не нашел. само задание:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru