Dispatcher.CurrentDispatcher.BeginInvoke不调用我有一个FileSystemWatcher,当在与UI线程不同的线程上观察文件更改时,它会触发它引发的事件。为了避免和跨线程的声音乐趣,我正在尝试使用publicvoidRaisePathChanged(objectsender,RenamedEventArgse){Dispatcher.CurrentDispatcher.BeginInvoke(newAction(()=>{//一些代码来处理文件状态在这里改变。}));这编译得很好,应该触发RaisePathChanged。但是,委托给Action(()=>{/*Here*/})的代码永远不会被调用,代码只是被跳过。为什么代码会跳过,我该如何解决?这是确保代码在WPF中创建它的线程上运行的最佳方式吗?感谢您的时间。你在混淆事情。Dispatcher.CurrentDispatcher与Application.Current.Dispatcher。第二个是你似乎正在寻找的那个。一探究竟。Dispatcher.CurrentDispatcher与Application.Current.Dispatcher使用ApplicationDispatcher进行试用。Dispatcher.CurrentDispatcher是“当前”线程的调度程序——在本例中线程RaisePathChanged正在执行。当您说Dispatcher.CurrentDispatcher时,如果没有,.NET将创建一个新的调度程序。但是,它不会Run()调度程序!因此,当您在其上安排某些事情(使用BeginInvoke)时,它实际上不会被执行,除非该调度程序正在运行。这可能回答了你的第一个问题(为什么不调用?)为了避免跨线程访问冲突,你需要线程的调度器来创建你想要保护的任何东西,并确保它是一个正在运行的调度器。如果您要保护的内容是在默认GUI线程上创建的,则按照前面的答案所述使用Application.Current.Dispatcher,否则您需要解释更多并发布一些代码来回答您的前两个问题。问题。http://www.diranieh.com/NET_WPF/Threading.htm有一个非常简短的介绍线程。以上为C#学习教程:Dispatcher.CurrentDispatcher.BeginInvoke不调用共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
