【问题标题】:Accessing CoreWindow from a windows phone 8.1 runtime component从 windows phone 8.1 运行时组件访问 CoreWindow
【发布时间】:2015-08-18 21:07:19
【问题描述】:

我正在尝试从 windows phone 8.1 C++ 运行时组件访问 CoreWindow。组件需要对 CoreWindow 触发的一些事件做出反应。我有以下代码。

IAsyncAction^ MyClass::RegisterCoreWindowVisibilityChanged()
{
    return CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
        ref new DispatchedHandler(
        [this]
        {
            auto eventHandler = ref new TypedEventHandler<CoreWindow^, VisibilityChangedEventArgs^>(this, &MyClass::OnCoreWindowVisibilityChanged);
            Window::Current->CoreWindow->VisibilityChanged += eventHandler;
        }
    ));
}

当使用该组件的应用程序是通用应用程序,但在 Silverlight 应用程序中失败并出现访问冲突异常时,此方法可以正常工作。

0xC0000005: Access violation reading location 0x00000000.

显然Windows::Current 在 silverlight 应用程序中返回 null。有没有办法让它在 Silverlight 和 Windows 商店应用程序中运行?

【问题讨论】:

  • 与问题没有直接关系,但为什么要使用调度程序附加到事件?
  • Windows::Current->CoreWindow 只能从我认为的UI线程访问。

标签: c# c++ silverlight windows-runtime windows-store-apps


【解决方案1】:

该对象仅在通用应用程序中可用(如documented)。

您需要对编译进行条件化,或者考虑切换到适用于桌面和手机的通用应用程序。

【讨论】:

  • 该组件旨在用于多个应用程序,这些应用程序可能是也可能不是通用应用程序。我将如何条件化代码以使用 Silverlight?我找不到任何与 VisibilityChanged 等效的东西。
  • 您具体想要完成什么?也许有办法以不同的方式处理它。
  • 运行时组件是一种服务,当应用程序进入后台时需要停用某些部分,并在返回前台时重新激活。不必总是将此功能编程到使用该组件的任何应用程序中,我希望在组件本身中自动设置它。
  • 没有一个应用激活生命周期事件满足您的需求?
  • PhoneApplicationService 类中不是应用激活生命周期事件吗?有没有办法从 Windows 运行时组件中使用它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多