2014-12-27 76 views
0

一段时间以来,我一直在想方法来实现一个简单的任务:我的应用程序中有两个后台任务,我想通知其他人有关某些更改(只需要单向沟通),但在我的生活中,我无法找出任何有效的方法。这些都是我从网上查到的方法,但是它们都有问题:在Windows Phone 8.1中发送/接收全局通知

  1. 我认为我可以在应用中创建的本地文件夹一个简单的文本文件,并把通知那里。监听过程可以以某种方式订阅该文件并被通知其内容的任何变化。以前用FileSystemWatcher类可以实现此目的,但它已从Windows 8中移除。
  2. 然后我发现了另外一个实现上述方法的API,即QueryOptions类。但是,尽管它在商店应用程序中可用,但它在Windows Phone上不受支持。
  3. 我曾考虑过使用推送通知,但它们都链接到Web服务。到目前为止,我还无法找到任何方式来使用它们在本地发送和接收通知,而无需使用Web服务器。

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

每半秒钟左右轮询一次文本文件的改变(这将是非常低效的,并引入滞后,这是我的应用程序无法容忍的),我找不出任何其他方式来实现这一点任务。

在此先感谢。

回答

1

如果您想在同一应用中的两个或多个进程之间使用通用IPC机制,您可以查看包装Win32 IPC基元的this sample

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

也无法通过两个不同的应用程序发信号;你必须通过网络进行往返(例如,一个应用程序将一个服务器传递给另一个应用程序)。

+0

谢谢,我偶然发现了code.msdn上的这个示例,但无法理解它是如何工作的。无论如何,这个解释意味着我应该为每一种我想要发送/接收的消息都有一个不同的NamedEvent,如果我有5-6个不同的命名事件,这是否可行?因为现在我已经使用TCP流套接字实现了一个有点狡猾的通信通道,有时它会随机抛出异常,而没有明显的原因。以这种方式实现IPC会更好吗? – Ali250 2014-12-29 09:22:53

+0

事实上,在WP8.1 RunTime应用程序中实现它似乎相当棘手。 WaitCallBack类仅在Silverlight中可用,并且[给出的链接中使用了[ThreadPool类]](http://msdn.microsoft.com/zh-cn/library/System.Threading.ThreadPool%28v=vs.110% 29.aspx)不同于[WP8.1中提供的那个](http://msdn.microsoft.com/en-us/library/windows/apps/windows.system.threading.threadpool.aspx)。 – Ali250 2014-12-29 09:42:56

+0

'WaitCallback'和'ThreadPool'类型只是样本的一部分;它们不是真正的应用程序所需要的(WinRT中也有微小的替换)。对于每条消息,您不一定需要不同的事件 - 例如,您可以将消息写入磁盘(在共享互斥体下),然后发出单个“新消息可用”事件;这取决于你如何实现它。 – 2014-12-30 21:05:06

相关问题