WinRT,Javascript和随机的“拒绝访问”exception

WinRT,Javascript和随机的“拒绝访问”exception,第1张

概述WinRT,Javascript和随机的“拒绝访问”exception

一些背景

在过去的几天里,我一直在开发一些windows 8的HTML5 / Winjs应用程序。 这个应用程序使用WinRT组件做了一些工作。

JavaScript部分与整个WinRT组件开始一个asynchronous *** 作:callback函数由JavaScript给出,WinRT在有一些asynchronous结果时调用它。

我忘了提及整个windows 8应用程序不是使用单页面方法开发的。

问题

如果在某个页面中调用了整个asynchronous *** 作,并且您没有导航到其他页面,则一切正常。

获取.NET枚举的windows本地化

用多个视图构buildC#.NET窗口应用程序

用C#下载文件

在windows中枚举特定types的文件

在.Net Cli应用程序中显示完成百分比的最佳方法是什么?

但是, 当您导航到其他页面时会发生什么? 当WinRT组件需要通知JavaScript部分有关asynchronous *** 作的结果时: ACCESS DENIED EXCEPTION ! 而你的应用程序崩溃。

到目前为止,我已经尝试过

整个WinRT组件方法返回一个IAsyncoperation<T> :在导航到其他页面之前,我调用JavaScript中的.cancel()方法=> .cancel()

我已经把callback函数放入Winjs.Application.sessionState中,以确保整个函数不被垃圾收集器破坏=> NO LUCK

这个问题…

我有没有机会通知WinRT组件取消它的asynchronous *** 作,并且不要试图将控件返回给JavaScriptcallback?

提前致谢

您可以检查其他人之前是否find相同的问题:

http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/5f9ebfe6-d652-442d-850d-41bda5e370c9

如何为windows窗体应用程序创build安装程序和卸载程序

如何在使用luna或classic时删除WPF窗口的边框?

使用多个对象遍历foreach循环

Powershell:pipe道input到通过调用运算符执行的命令

应用程序崩溃作为有限的用户

我发现一些试错后的解决方案。

回答我自己的问题:

我有没有机会通知WinRT组件取消它的异步 *** 作,并且不要试图将控件返回给JavaScript回调?

是的,但不是直接的 。

又怎样?

在WinRT中,C#组件端,在C#WinRT组件中设计CancellationTokenSource属性,并在调用异步 *** 作之前分配它。

创建一个CancellationTokenSource实例,并在调用异步 *** 作之前将其设置为在上一步中创建的属性。

在将.NET任务转换为WinRT IAsyncoperation<T>之前,用ContinueWith方法ContinueWith执行异步 *** 作,并将CancellationToken作为以前实例化的CancellationTokenSource一部分创建为ContinueWith方法(请参阅取消任务: http : //msdn.microsoft .com / en-us / library / dd997396.aspx )。

在调用CancellationTokenSource.Cancel()的WinRT组件中实现CancelCurrentAsyncoperation方法。

在导航到另一个页面之前,先调用Winjs / JavaScript中的CancelCurrentAsyncoperation方法。

WinRT组件示例代码:

public sealed class MyWinRTComponent { private CancellationTokenSource { get; set; } public voID CancelLastAsyncoperation() { if(CancellationTokenSource != null) { CancellationTokenSource.Cancel(); } } public IAsyncoperation<string> DoSomethingAsync() { CancellationTokenSource = new CancellationTokenSource(); return DoSomethingAsync() .ContinueWith<string>(task => task.Result,CancellationTokenSource); } }

JavaScript示例代码:

var component = new MyWinRTComponent(); component.doSomethingAsync().then(function(text) { // Do stuff }); // Before navigating to other page component.cancelCurrentAsyncoperation();

这对我有效!

总结

以上是内存溢出为你收集整理的WinRT,Javascript和随机的“拒绝访问”exception全部内容,希望文章能够帮你解决WinRT,Javascript和随机的“拒绝访问”exception所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1294360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存