在主UI线程上触发FileSystemWatcher事件

6

我能够在主UI线程上获取文件系统监视器事件吗?目前,文件更改是在它们自己的线程上触发的。


1
WPF还是WinForms?WinForms使用Control.Invoke(),WPF使用Dispatcher.BeginInvoke()从事件处理程序中将事件传递到UI线程。 - Steve
WinForms - 我的意思是更改事件 - 而不是如何更新GUI。 - user1438082
1
你不必更新GUI,但控件知道它们所在的线程,这将使一些代码在该线程上执行。你可以自行决定要做什么。 - Steve
@steve 你说得对。你想把它作为答案添加,这样我就可以接受吗? - user1438082
1
跟随Hans Passant的答案 - 我之前不知道这个解决方案。 - Steve
2个回答

16

只需将FileSystemWatcher.SynchronizingObject属性设置为窗体实例。这与调用BeginInvoke()相同,但为您自动完成。样板代码:

public Form1() {
    InitializeComponent();
    fileSystemWatcher1.SynchronizingObject = this;
}

这是一行代码,很难看出你遇到了什么问题。 - Hans Passant
谢谢Hans - 我认为很多人会从你的智慧中受益。 - user1438082
1
如果您在设计器中添加FileSystemWatcher,则SynchronizingObject会自动在后台代码文件中设置。 - Paul Williams

2
this.BeginInvoke((MethodInvoker)(() => SomeMethod())); // Check files in the Main thread otherwise threading issues occur 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接