Adm*_*eck 5 c# filesystemwatcher
我有一个用C#编写的Windows窗体应用程序,我在其中使用FileSystemWatcher监视新文件的文件夹,然后对它们执行一些处理.我的应用程序设计为在系统托盘中运行,因此在启动时不会实例化任何表单.问题是Created事件在一个单独的线程上触发,当我尝试在Created事件中创建一个表单实例时,我得到一个ThreadStateException,表明我需要在SingleThreadApartment中运行.我想我需要设置FileSystemWatcher.SynchronizingObject属性但不知道要使用什么,因为我的应用程序中没有主窗体.
您将必须在Main()方法中调用Application.Run(),以使Windows窗体同步机制就位,以便FileSystemWatcher可以正确地将调用编组到主线程。然后,您将遇到的问题是主窗体将变得可见。通过将此代码粘贴到类中来解决此问题:
protected override void SetVisibleCore(bool value) {
if (!this.IsHandleCreated) {
this.CreateHandle();
value = false;
}
base.SetVisibleCore(value);
}
Run Code Online (Sandbox Code Playgroud)
如果执行此操作,则对表单的外观没有任何限制。
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |