在WPF应用程序中,是否有一个对象可以分配给FileSystemWatcher.SynchronizingObject?我可以自己创建一个,但如果有可用的对象,我想使用它。
反射器显示实现ISynchronizeInvoke
接口的唯一类是System.Windows.Form.Control
(以及它的子类),它是FileSystemWatcher.SynchronizingObject
属性的类型;似乎没有任何WPF对象实现这个接口。
有一种方法。当您启用事件(EnableRaisingEvents = true)时,FileSystemWatcher会创建自己的线程来监视文件系统事件。通过ISynchronizeInvoke,它可以异步调用您窗体的成员,例如,(它的线程可以与主线程 - UI线程异步交互)。
在WPF中没有实现ISynchronizeInvoke,但是可以通过窗口的Dispatched属性与UI线程交互,如下所示:
var fsw = new FileSystemWatcher()
{
//Setting the properties: Path, Filter, NotifyFilter, etc.
};
fsw.Created += (sender, e) =>
{
Dispatcher.Invoke(new Action<params_types>((params_identifiers) =>
{
//here the code wich interacts with your IU elements
}), here_params);
};
//... in this way (via Dispatcher.Invoke) with the rest of events
fsw.EnableRaisingEvents = true;
DispatcherTimer t1 = new DispatcherTimer();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
t1.Interval = new TimeSpan(0,0,0,0,200);
t1.Tick += new EventHandler(t1_Tick);
t1.Start();
...
void t1_Tick(object sender, EventArgs e)
{
//some work
}