【问题标题】:C# WinRT component fails in UserControl constructor calling from WinJSC# WinRT 组件在从 WinJS 调用的 UserControl 构造函数中失败
【发布时间】:2013-01-01 00:28:28
【问题描述】:

我们正在使用 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(在 MSDN article I found about WinJS/C++ component 中推荐)。

如果我从 Xaml/C# 客户端调用它,代码可以在有或没有 Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher.RunAsync() 的情况下工作。

我尝试在 Google 上搜索并阅读了所有 UserControl、Dispatcher 和 WinJS 文档,但我没有找到任何相关内容。这是一个已知问题吗?有人可以提出解决方法吗?

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

【问题讨论】:

  • 您能否发布一个简短的示例代码来说明问题? (C# 和 JS 端。)
  • 我明天会尝试做点什么。当前代码不好演示。

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢。不幸的是,这证实了我的恐惧。怎么就不能在winrt组件中制作UI?!?不知何故,我会认为这将是制作它们的主要原因之一......好吧,还有一个要记住的“微软主义”。
【解决方案2】:

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

【讨论】:

  • 感谢回调的想法。
猜你喜欢
  • 2013-09-01
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
相关资源
最近更新 更多