【问题标题】:Sending/receiving global notifications in Windows Phone 8.1在 Windows Phone 8.1 中发送/接收全局通知
【发布时间】:2014-12-29 13:18:29
【问题描述】:

一段时间以来,我一直在想办法完成一项简单的任务:我的应用中有两个后台任务,我希望一个通知另一个有关某些更改的信息(只需要单向通信),但对于我的生活,我想不出任何可行的方法。这些是我从网上找到的方法,但都有问题:

  1. 我想我可以在应用程序的本地文件夹中创建一个简单的文本文件并将通知放在那里。监听进程可以以某种方式订阅该文件,并在其内容发生任何变化时得到通知。这在以前可以通过 FileSystemWatcher 类实现,但从 Windows 8 开始已被删除。
  2. 然后我找到了实现上述方法的另一个API,即QueryOptions类。但事实证明,虽然它在应用商店应用中可用,但在 Windows Phone 上不受支持。
  3. 我考虑过使用推送通知,但它们都链接到 Web 服务。到目前为止,我还想不出任何方法来使用它们在没有网络服务器的情况下在本地发送和接收通知。

有什么办法可以做到这一点吗?这似乎是一项非常简单的任务,但事实证明这是不可能实现的。 Windows Phone 上是否有任何其他 API 允许在文件内容更改时通知进程?或者有什么办法可以解决推送通知并实现这一目标?我也在一些地方读到,命名管道和套接字经常用于在其他平台上实现这种功能,有什么方法可以在这里应用吗?

每半秒左右轮询一次文本文件以进行更改(这将非常低效并引入延迟,这是我的应用程序无法容忍的),我想不出任何其他方法来完成此任务.

提前致谢。

【问题讨论】:

    标签: c# notifications windows-phone windows-phone-8.1


    【解决方案1】:

    如果您想要跨两个或多个进程的通用 IPC 机制在同一个应用程序中,您可以查看封装了 Win32 IPC 原语的this sample

    当文件更改时,无法“唤醒”进程(或启动后台任务)。所以这只有在进程同时运行时才有效(如果它们不同时运行,您可以使用其他类型的信号机制,例如磁盘上的占位符文件)。

    也无法通过两个不同的应用程序发出信号;为此,您必须通过网络往返(例如,一个应用 ping 一个服务器,然后将其中继到另一个应用)。

    【讨论】:

    • 谢谢,我在 code.msdn 上看到了这个示例,但无法理解它是如何工作的。无论如何,这种解释意味着我应该为我想要发送/接收的每种消息都有一个不同的 NamedEvent,如果我有,比如 5-6 个不同的命名事件,这是否可行?因为现在我已经使用 TCP 流套接字实现了一个有点狡猾的通信通道,它有时会无缘无故地随机抛出异常。以这种方式实现 IPC 会更好吗?
    • 实际上,在 WP8.1 RunTime 应用程序中实现这似乎相当棘手。 WaitCallBack 类仅在 Silverlight 中可用,ThreadPool class used in the link you gavethe one available in WP8.1 不同。
    • WaitCallbackThreadPool 类型只是示例的一部分;在真正的应用程序中不需要它们(WinRT 中也有一些简单的替代品)。您不一定需要为每条消息使用不同的事件 - 例如,您可以将消息写入磁盘(在共享互斥锁下),然后发出单个“新消息可用”事件;如何实现它取决于您。
    • 对,所以即使我在一个单独的测试项目中得到了我想要的工作,但当我将它与我的主应用程序合并时,它给出了一个奇怪的问题:我必须从中性更改目标架构到 ARM 以编译 lpcWrapper 类,但由于某种原因导致后台音频任务失败,即它永远不会正确注册并且 task.OnCanceled 事件触发,即使它在中性目标架构上工作正常。有什么想法吗?
    • Configuration Manager 对话框中(可从工具栏中“调试”旁边的下拉菜单访问),确保 C++ 项目和 .NET 项目始终匹配在架构方面。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多