Windows 运行时 (WP 8) 进程外组件和引发/订阅事件

Windows Runtime (WP 8) out of process component and raising / subscription events

本文关键字:事件 组件 运行时 WP 进程 Windows      更新时间:2023-10-16

我已经用自己的后台线程制作了进程外的 WR/WP8 组件。它在内部处理 SIP 堆栈并在后台线程中运行。它是从ChatterBox MSDN示例修改的代码。https://code.msdn.microsoft.com/windowsapps/ChatterBox-VoIP-sample-app-b1e63b8b

最后几天,我添加委托以从组件引发事件。在 C++/CX 中,它是:

  public delegate void OnLogMessage(Platform::String^ msg);
  public ref class Logger sealed
  {
  public:
    Logger();
    virtual ~Logger();
    void FlushLog();
    event OnLogMessage^ OnLogMessage;
  };

在 C# 代码中订阅了事件:

BackgroundProcessController.Instance.Logger.OnLogMessage += new   IntTalk.OnLogMessage(mLogger_OnLogMessage);

它构建正常。

但是在调试过程中我看到异常:

A first chance exception of type 'System.Exception' occurred in mscorlib.ni.dll
Additional information: Interface not registered (Exception from HRESULT: 0x80040155)
If there is a handler for this exception, the program may be safely continued.

生成代理存根 DLL。我检查了 .h/.c 文件 - 它们包含一些事件代码。

此问题的原因可能是什么?

在纯模式下调试相同的代码时,我观察到"接口未注册"异常。简短检索得出以下参考:

ATL 进程外回调接口上的"接口未注册"错误

但我使用 C++/CX,根本没有 IDL。我检查了ChatterBox演示(这是我的VoIP应用程序的起点) - 他们根本不使用Windows运行时事件。

所以我停止了朝这个方向的尝试。

另一种可能的方法可能是:

  • 使用自定义事件结构的队列,从 C# 端轮询和处理此事件。
  • 使用 C++/CX 中声明的接口作为事件处理程序。在 C# 端实现此接口。但是不确定它是否会将事件编组到主 UI 线程中。