从WinJS调用的UserControl构造函数中的C#WinRT组件失败

时间:2013-01-17 12:51:08

标签: multithreading user-interface windows-runtime winrt-xaml winjs

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

应用层:

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

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

如果我从Xaml / C#客户端调用它,代码可以使用或不使用Windows.UI.Core.CoreWindow.GetForCurrentThread()。Dispatcher.RunAsync()。

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

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

2 个答案:

答案 0 :(得分:3)

Xaml-based WinRT controls cannot be used in Javascript-based WinRT projects.您可以使用任何WinRT类库,但不能使用其中的Xaml控件。

如果您仍想将HTML-Javascript与Xaml结合使用,我建议您创建一个基于Xaml的项目,并将HTML UI包装在WebView control中。

答案 1 :(得分:2)

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