我有一个简单的 C# 4.0 Windows 窗体表单,它创建一个监视目录的 FileSystemWatcher 实例。添加文件后,会触发适当的事件,然后我在另一个目录中执行一些操作。然后我创建一个子表单的实例。子窗体挂起,并且控件不绘制。
我认为这是因为 FileSystemWatcher 位于不同的线程上,即使看起来我是从主窗体启动的。在我认为是另一个线程的 FileSystemWatcher 事件中调用子表单的正确方法是什么?
Set the FileSystemWatcher.SynchronizingObject
属性到您的主窗体。
MSDN http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.synchronizingobject.aspx:
当 SynchronizingObject 为 null 时,处理 Changed 的方法,
Created、Deleted 和 Renamed 事件在线程上调用
系统线程池。有关系统线程池的更多信息,请参见
线程池。
当 Changed、Created、Deleted 和 Renamed 事件由
可视化 Windows 窗体组件,例如按钮,访问
通过系统线程池的组件可能无法工作,或者可能会导致
在一个例外中。通过将 SynchronizingObject 设置为 a 来避免这种情况
Windows 窗体组件,它导致处理
在同一事件上调用 Changed、Created、Deleted 和 Renamed 事件
创建组件的线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)