[英]Dispatcher.CurrentDispatcher.InvokeAsync not working
我正在将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.
});
}
}
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.