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

FileSystemWatcher и Timer не работают как надо

20.11.2015, 14:48. Показов 1434. Ответов 13

Студворк — интернет-сервис помощи студентам
Пишу код


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
28
29
30
namespace watcher
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = @"C:\Records";
            watcher.Created += new FileSystemEventHandler(onFileCreate);
            watcher.EnableRaisingEvents = true;
        }
        private void onFileCreate(object source, FileSystemEventArgs e)
        {
            BackgroundWorker bw = new BackgroundWorker();
            bw.DoWork += (s, a) =>{
                Timer tm = new Timer();
                tm.Interval = 1000;
                tm.Tick += (q, w) =>{
                    MessageBox.Show("");
                };
                tm.Start();
            };
            bw.RunWorkerAsync();
        }
    }
}
Запускаю, добавляю в папку Records файл -- ничего не происходит

Делаю в данном коде совсем небольшое изменение:

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
28
29
30
31
namespace watcher
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = @"C:\Records";
            watcher.Created += new FileSystemEventHandler(onFileCreate);
            watcher.EnableRaisingEvents = true;
        }
        private void onFileCreate(object source, FileSystemEventArgs e)
        {
            BackgroundWorker bw = new BackgroundWorker();
            bw.DoWork += (s, a) =>{
                Timer tm = new Timer();
                tm.Interval = 1000;
                tm.Tick += (q, w) =>{
                    MessageBox.Show("");
                };
                tm.Start();
                /*ДОБАВЛЯЮ ТОЛЬКО ЭТО*/MessageBox.Show("");/*ДОБАВЛЯЮ ТОЛЬКО ЭТО*/
            };
            bw.RunWorkerAsync();
        }
    }
}

После чего MessageBox'ы с timer'а начинаются сыпаться как следует.

Объясните пожалуйста в чем дело? Ну и извечный вопрос -- подскажите новичку, как передать параметр в timer?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2015, 14:48
Ответы с готовыми решениями:

[WPF] Не работают Timer, KeyDown в игре
Здравствуйте, пишу игрушку Old school Race. Подскажите пожалуйста что тут не так? почему KeyDown, Timer не работают? И как исправить? ...

Не работают timer boundary events в Alfresco's Activiti 6
Здравствуйте. У нас в фирме используется Alfresco's Activiti 6, и необходимо добавить timer boundary events на bpm-схему. Всяко-разно...

Почему некоторые скрипты в Google Chrome работают не так, как надо?
Почему некоторые скрипты в Google Crome работают не так как надо, в то время как в Opera и Mozzila работает все отлично! В чем это...

13
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
20.11.2015, 19:54
Цитата Сообщение от kuraminn Посмотреть сообщение
Объясните пожалуйста в чем дело?
А вы объясните, что за чудеса вы написали? Что этот код должен по вашему делать?
0
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 7
20.11.2015, 20:05  [ТС]
ну. Собственно:
файлсистемвотчер мониторит папку. При появлении в папке файла создается бэкграундворкер, в котором создается таймер, который показывает мессенджбокс с пустым сообщением каждую секунду.
0
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
20.11.2015, 20:58
Даже тяжело представить для чего это надо, ну ладно... Пробуй:
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
28
29
30
31
32
33
using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
 
namespace BackgroundWorker
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            var watcher = new FileSystemWatcher("E:\\Test");
            watcher.Created += OnCreated;
            watcher.EnableRaisingEvents = true;
        }
        private void OnCreated(object o, FileSystemEventArgs args)
        {
            var bw = new System.ComponentModel.BackgroundWorker();
            bw.DoWork += (sender1, eventArgs) => MessageBox.Show("");
            bw.RunWorkerCompleted += (sender1, eventArgs) =>
            {
                Thread.Sleep(1000);
                bw.RunWorkerAsync();
            };
            bw.RunWorkerAsync();
        }
    }
}
Цитата Сообщение от kuraminn Посмотреть сообщение
watcher.Path = @"C:\Records";
замени на "C:\\Records", кстати...
1
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 7
20.11.2015, 21:01  [ТС]
Цитата Сообщение от nestquik2 Посмотреть сообщение
Цитата Сообщение от kuraminn Посмотреть сообщение
watcher.Path = @"C:\Records";
замени на "C:\\Records", кстати...


А почему? Разве результат не аналогичен?
0
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
20.11.2015, 21:02
Цитата Сообщение от kuraminn Посмотреть сообщение
А почему? Разве результат аналогичен?
Результат может быть и аналогичный, но не в данном случае.
0
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 7
20.11.2015, 21:11  [ТС]
Показывает только одно сообщение. Пока не отожму ОК -- другое не показывается. А мне нужно, чтобы непрерывно
0
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
20.11.2015, 21:19
kuraminn, честно говоря и сам не знаю... Методом научного втыка решил эту проблему...
0
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 7
20.11.2015, 21:20  [ТС]
в любом случае, спасибо, подтолкнули в нужную сторону. А что насчет передачи параметра в тик таймера?
0
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
20.11.2015, 21:21
kuraminn, зачем тебе таймер вообще, да еще и в BackgroundWorker'е?
0
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 7
20.11.2015, 21:31  [ТС]
после появления файла над каждые две секунды проверять его существование. Логика скрипта такая должна быть, я думаю:
При каждом создании каждого файла создается бэкворкер, в который передается пусть к файлу из e.Fullpath от файлвотчера. В бэкворкере создается таймер и каждый две секунды чекает наличие файла по переданному в бэкворкер пути. Как только файл пропадает -- бэкворкер для этого файла выпиливается. Если файл существует дольше 10 сек -- то я делаю с ним конкретные действия уже.
0
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
20.11.2015, 21:32
Цитата Сообщение от nestquik2 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
private void OnCreated(object o, FileSystemEventArgs args)
        {
            var bw = new System.ComponentModel.BackgroundWorker();
            bw.DoWork += (sender1, eventArgs) => MessageBox.Show("");
            bw.RunWorkerCompleted += (sender1, eventArgs) =>
            {
                Thread.Sleep(1000);
                bw.RunWorkerAsync();
            };
            bw.RunWorkerAsync();
        }
используй это как таймер
1
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 7
20.11.2015, 21:41  [ТС]
хм. Спасибо. А как передать e.FullPath в dowork?
0
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
20.11.2015, 21:43
Цитата Сообщение от kuraminn Посмотреть сообщение
e.FullPath
вместо "e" -> "eventArgs" в моем контексте
Цитата Сообщение от nestquik2 Посмотреть сообщение
C#
1
bw.DoWork += (sender1, eventArgs) => MessageBox.Show(eventArgs.FullPath);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.11.2015, 21:43
Помогаю со студенческими работами здесь

FileSystemWatcher как отследить действия
Есть следующая функция для слежения за папкой: public void dirwatcher() { string put = pathme; ...

Как с FileSystemWatcher найти изменённый объект
Подскажите, пожалуйста: у меня есть некий класс, скачивающий файлик с удалённого сервера, он же хранит всякую полезную информацию об этом...

FileSystemWatcher - как отследить копирование папки с файлами?
Не понимаю как отследить копирование или перемещение папки с файлами. Отслеживание создания отдельно файлов или отдельно папки работает...

Как научить FileSystemWatcher мониторить все диски, включая новоподключенные?
Как научить FileSystemWatcher мониторить все диски, включая новоподключенные?

Запуск/остановка таймера при вводе в Edit команд Timer Start/Timer Stop
Суть вот в чём на форме есть таймер который выполняет обратный отсчёт и есть Edit, задача вот какая при вводе в Edit команды...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru