Windows Forms с FileSystemWatcher не запускает дочернюю форму - PullRequest
4 голосов
/ 14 июля 2011

У меня есть простая форма Windows Forms C # 4.0, которая создает экземпляр FileSystemWatcher, который просматривает каталог. Когда файл добавлен, происходит соответствующее событие, и я делаю некоторые вещи в другом каталоге. Затем я делаю экземпляр дочерней формы. Дочерняя форма зависает, а элементы управления не рисуют.

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

1 Ответ

5 голосов
/ 14 июля 2011

Установите для свойства FileSystemWatcher.SynchronizingObject основную форму.

MSDN :

Когда SynchronizingObject имеет значение null, методы обрабатывают измененные, созданные, удаленныеи переименованные события вызываются в потоке из пула системных потоков.Для получения дополнительной информации о пулах системных потоков см. ThreadPool.

Когда события Changed, Created, Deleted и Renamed обрабатываются визуальным компонентом Windows Forms, таким как Button, доступ к компоненту через пул системных потоков.может не работать или может привести к исключению.Избегайте этого, установив SynchronizingObject для компонента Windows Forms, который заставляет методы, обрабатывающие события Changed, Created, Deleted и Renamed, вызываться в том же потоке, в котором был создан компонент.

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