繁体   English   中英

Dispatcher.CurrentDispatcher.InvokeAsync不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM