5

我们正在使用 JavaScript (WinJS) 构建一个 WinRT 应用程序,该应用程序通过 C# WinRT 组件库访问 REST/JSON Web 服务。在组件库中,我们有一个登录控件(很像 WebAuthenticationBroker),它允许我们将 ACS 登录与我们的 REST 服务一起使用。

应用层:

  • 客户端(JS)
  • WinRT 组件 dll (C#)
  • C# 类库 dll (C#)
  • UserControl(Xaml/C#,包含 WebView)

问题:当尝试创建登录控件时,WinRT 会抛出“HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)”异常(进入 UserControl 的构造函数时),即使我通过 Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher 调用它(在我发现的有关 WinJS/C++ 组件的 MSDN 文章中推荐)。

如果我从 Xaml/C# 客户端调用它,无论是否使用 Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(),代码都可以工作。

我试过用谷歌搜索这个并且还阅读了所有的 UserControl、Dispatcher 和 WinJS 文档,但我没有找到任何相关的东西。这是一个已知问题吗?有人可以提出解决方法吗?

由于我是第一次发帖,请保持温和 :-) 非常欢迎任何帮助!

4

2 回答 2

3

基于 Xaml 的 WinRT 控件不能在基于 Javascript 的 WinRT 项目中使用。您可以使用任何 WinRT 类库,但不能使用其中的 Xaml 控件。

If you still want to combine HTML-Javascript with Xaml, I would recommend creating a Xaml-based project, and wrapping your HTML UI in a WebView control.

于 2013-01-17T18:32:50.220 回答
2

我不希望在 HTML/WinJS 应用程序中使用 WinRT/XAML UI。您可能需要使用一些回调来请求在 WinJS 应用程序/组件库而不是 XAML 库中创建 UI。

于 2013-01-17T17:07:45.007 回答