【发布时间】:2024-04-30 12:15:02
【问题描述】:
我的应用中有一些本地数据库的 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 中?
【问题讨论】:
-
因为 OnInvoke 方法在您的 PeriodicTask 的线程上,但是您的方法中有一些控制必须在 UI 线程上执行。所以你必须在 Dispatcher 关联的线程上异步执行指定的委托。
-
什么控制?我只使用 Linq 2 Sql。
-
你的onInvoke方法中是否绑定任何数据来控制?
-
抛出异常的具体行是什么?
-
已编辑问题。这是第一行。
标签: c# .net windows-phone-8 unauthorizedaccessexcepti