繁体   English   中英

WP8 UnauthorizedAccessException

[英]WP8 UnauthorizedAccessException

我的应用程序中有一些带有本地数据库的SQL代码,它可以正常工作:

using(var ctx = new TestCTX()){
     var res = ctx.Test.ToList();
}

然后我想在OnInvoke方法的PeriodicTask中使用它,我得到UnauthorizedAccessException

public override void OnInvoke(ScheduledTask){
    using(var ctx = new TestCTX()){
        var res = ctx.Test.ToList();
    }
}

但随后我将其包装为:

public override void OnInvoke(ScheduledTask task){
    Deployment.Current.Dispatcher.BeginInvoke(()=>{     
         using(var ctx = new TestCTX()){
             var res = ctx.Test.ToList();
         }
    });   
}

然后就可以了。 所以这是一个问题:为什么我必须将其包装到BeginInvoke中?

在WPF中,只有创建DispatcherObject的线程才能访问该对象。 例如,从主UI线程分离出来的后台线程无法更新在UI线程上创建的Button的内容。 为了使后台线程访问Button的Content属性,后台线程必须将工作委派给与UI线程关联的Dispatcher。 这可以通过使用Invoke或BeginInvoke来实现 调用是同步的,而BeginInvoke是异步的。 该操作将以指定的DispatcherPriority添加到Dispatcher的事件队列中。

BeginInvoke异步的 ;因此,控制在被调用后立即返回到调用对象。

调用同步操作; 因此,直到回调返回之后,控制权才返回到调用对象。

您可以从下面的MSDN参考中阅读更多信息。 MSDN参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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