windows-phone-8 – 从便携式类库更新UI线程

前端之家收集整理的这篇文章主要介绍了windows-phone-8 – 从便携式类库更新UI线程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个在Windows Phone 8上运行的MVVM Cross应用程序,我最近将其移植到使用可移植类库.

视图模型位于可移植类库中,其中一个公开了一个属性,该属性通过数据绑定从Silverlight for WP工具包启用和禁用PerformanceProgressBar.

用户按下按钮时,RelayCommand启动后台进程,该进程将属性设置为true,这将启用进度条并执行后台处理.

在将其移植到PCL之前,我能够从UI线程调用更改以确保启用了进度条,但是在PCL中无法使用Dispatcher对象.我该如何解决这个问题?

谢谢

如果您无权访问Dispatcher,则只需将BeginInvoke方法的委托传递给您的类:
public class Yourviewmodel
{
    public Yourviewmodel(Action<Action> beginInvoke)
    {
        this.BeginInvoke = beginInvoke;
    }

    protected Action<Action> BeginInvoke { get; private set; }

    private void SomeMethod()
    {
        this.BeginInvoke(() => DoSomething());
    }
}

然后实例化(来自可以访问调度程序的类):

var dispatcherDelegate = action => Dispatcher.BeginInvoke(action);

var viewmodel = new Yourviewmodel(dispatcherDelegate);

或者您也可以在调度程序周围创建一个包装器.

首先,在可移植类库中定义IDispatcher接口:

public interface IDispatcher
{
    void BeginInvoke(Action action);
}

然后,在有权访问调度程序的项目中,实现接口:

public class DispatcherWrapper : IDispatcher
{
    public DispatcherWrapper(Dispatcher dispatcher)
    {
        this.Dispatcher = dispatcher;
    }

    protected Dispatcher Dispatcher { get; private set; }

    public void BeginInvoke(Action action)
    {
        this.Dispatcher.BeginInvoke(action);
    }
}

然后,您可以将此对象作为IDispatcher实例传递给可移植类库.

猜你在找的Windows相关文章