windows-phone-8 – 从便携式类库更新UI线程
发布时间:2020-12-13 20:36:09 所属栏目:Windows 来源:网络整理
导读:我有一个在Windows Phone 8上运行的MVVM Cross应用程序,我最近将其移植到使用可移植类库. 视图模型位于可移植类库中,其中一个公开了一个属性,该属性通过数据绑定从Silverlight for WP工具包启用和禁用PerformanceProgressBar. 当用户按下按钮时,RelayCommand
我有一个在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 – 解决托管和本机堆栈跟踪 – 要使用哪
- windows-server-2008 – 新服务器(IIS7 / Window
- 备份 – 备份VHD集
- group-policy – 通过GPO或PowerShell部署二进制
- windows-phone-7 – 如何在WIndows Phone 7中获取
- win-universal-app – Windows 10 Universal app
- 想说再见不容易,win7最新市占率依然超36%
- .net – 通过远程桌面提高WPF应用程序速度?
- Windows 8 GUI,以及WPF/SilverLight/WinRT/Metro
- winapi – 获取运行OpenGL的子窗口的截图(Window
热点阅读