2011-07-14 38 views
3

我有一个简单的C#4.0 Windows窗体窗体,使一个FileSystemWatcher实例监视目录。当添加一个文件时,正确的事件触发,我在另一个目录中做一些东西。然后我创建一个子表单的实例。子窗体挂起,并且控件不绘制。Windows Forms与FileSystemWatcher不启动子窗体

我认为这是因为FileSystemWatcher在不同的线程上,即使它看起来像我从主窗体启动。从我认为是另一个线程的FileSystemWatcher事件调用子窗体的正确方法是什么?

回答

4

FileSystemWatcher.SynchronizingObject属性设置为您的主窗体。

MSDN

当是SynchronizingObject的空,处理方法的改变, 创建,删除,并重新命名为事件称为从 系统线程池中的线程。有关系统线程池的更多信息,请参见 ThreadPool。

在变更后,创建,删除和重命名事件由 处理的可视化Windows窗体组件,如按钮,通过该系统线程池访问 成分的异常可能无法正常工作,或可能导致 。通过将SynchronizingObject设置为 Windows窗体组件来避免这种情况,这会导致处理 更改,创建,删除和重命名事件的方法在创建组件的同一个 线程上调用。