2014-12-27 79 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

相關問題