带有FileSystemWatcher的Windows窗体未启动子窗体

Sno*_*owy 4 multithreading filesystemwatcher winforms

我有一个简单的C#4.0 Windows Forms表单,该表单构成监视目录的FileSystemWatcher的实例。添加文件后,将触发适当的事件,并且我在另一个目录中执行一些操作。然后,我创建一个子窗体的实例。子窗体挂起,并且控件不绘制。

我认为这是因为FileSystemWatcher位于不同的线程上,尽管看起来我是从主窗体启动的。我认为另一个线程从FileSystemWatcher事件中调用子窗体的正确方法是什么?

Igb*_*man 5

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

MSDN

当SynchronizingObject为null时,将在系统线程池中的线程上调用处理Changed,Created,Deleted和Renamed事件的方法。有关系统线程池的更多信息,请参见ThreadPool。

当可视的Windows Forms组件(例如Button)处理Changed,Created,Delete和Renamed事件时,通过系统线程池访问该组件可能不起作用,或者可能导致异常。通过将SynchronizingObject设置为Windows Forms组件来避免此情况,这会导致在创建组件的同一线程上调用处理Changed,Created,Delete和Renamed事件的方法。