Dispatcher.CurrentDispatcher.InvokeAsync not working
本文关键字:working not InvokeAsync CurrentDispatcher Dispatcher | 更新日期: 2023-09-27 18:04:03
我正在将WPF应用程序的某些部分移植到一个无窗口库中,以便在其他项目中使用。原始代码中有一些方法是使用Application.Current.Dispatcher.InvokeAsync()
调用的。由于这在普通类库中不可用,所以我为它做了一个包装器,并且在库中我尝试使用Dispatcher.CurrentDispatcher.InvokeAsync
来代替-我设置了一个中断并看到正在进行的调用,但传递的方法从未执行。我错过了什么?
您可能需要两个版本的分派器包装器:一个用于在内部使用Application.Current.Dispatcher的UI应用程序。另一种是用于直接调用委托而不需要内部调度程序的非ui应用程序。下面的代码是这个想法的一个简单示例:
public class DispatcherWrapper
{
private readonly Action<Action> _dispatch;
public DispatcherWrapper(Action<Action> dispatch)
{
_dispatch = dispatch;
}
public void Dispatch(Action action)
{
_dispatch(action);
}
}
public class Application
{
internal void SomeCode()
{
// A UI application would call...
var dispatcher = Dispatcher.CurrentDispatcher;
var dispatcherWrapper = new DispatcherWrapper(action => dispatcher.BeginInvoke(action));
// A non-UI application would call...
dispatcherWrapper = new DispatcherWrapper(action => action());
// The library code would call..
dispatcherWrapper.Dispatch(() => {
// This code runs on the UI thread in UI apps and on any thread in non-UI apps.
});
}
}