一些背景信息
最近我正在开发一些 Windows 8 HTML5/WinJS 应用程序。这个应用程序使用 WinRT 组件完成一些工作。
JavaScript 部分与整个 WinRT 组件协同开始异步操作:回调函数由 JavaScript 给出,当 WinRT 有一些异步结果时,会调用它。
我忘了提到,整个 Windows 8 应用程序并不使用“单页方法”(single page approach)。
问题
如果整个异步操作在某个页面中被调用,并且您不浏览到其他页面,那么一切都如预期所示。
但是,当您浏览到其他页面时会发生什么? 当 WinRT 组件需要通知 JavaScript 部分关于异步操作的结果时:ACCESS DENIED EXCEPTION!您的应用程序崩溃了。
我到目前为止尝试过的方法
- 整个 WinRT 组件方法返回一个
IAsyncOperation<T>
:在导航到其他页面之前,在 JavaScript 中调用.cancel()
方法 => 没有成功 - 我将回调函数放入
WinJS.Application.sessionState
中,以确保整个函数不会被垃圾回收器销毁 => 没有成功
问题是...
我有任何机会通知 WinRT 组件取消它的异步操作并不尝试将控件返回到 JavaScript 回调吗?
提前感谢
您可以检查其他人以前遇到了相同的问题: