2013-03-11 19 views
1

我有一個用C#編寫的Windows 8應用程序中的後臺任務,我無法將其連接到我的UI任務。我已經嘗試在我的後臺任務上打開一個StreamSocketListener,並在我的UI任務上使用StreamSocket連接它,以及其他方式。如果我在UI任務或後臺任務中同時擁有偵聽器和連接器,則一切正常。但是,兩者之間似乎存在某種隔離。Windows 8套接字通信與後臺任務

我也可以連接到外部服務,因此我認爲這可能與需要回送免除有關,但似乎並非如此,因爲打開AppContainer Loopback豁免實用程序將所有應用程序顯示爲具有環回訪問權限。

是否還有其他需要啓用以使我的應用程序的這兩部分之間的網絡通信正常工作?我在我的軟件包清單中啓用了私有網絡(客戶端和服務器)功能(其他客戶端/服務器對沒有幫助,所以我只使用那個)

回答

0

您可以使用您的完成事件後臺任務並在您的用戶界面中反覆運行。使用LocalSettings傳遞數據。

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx

private void OnCompleted(IBackgroundTaskRegistration task, BackgroundTaskCompletedEventArgs args) 
{ 
    var settings = ApplicationData.Current.LocalSettings; 
    var key = task.TaskId.ToString(); 
    var message = settings.Values[key].ToString(); 
    UpdateUIExampleMethod(message); 
} 
+0

這有兩個主要缺點: 1)我無法溝通大型數據結構,而無需編寫到一個文件(例如,任何超過8K大) 2)我不能有頻繁的後臺任務。通過「頻繁的後臺任務」,我的意思是類似於每10秒運行一次的後臺任務等......我目前通過使用ThreadingPool計時器來做到這一點,並且它工作得很好,我只需要一種方法來回傳給UI線程。你甚至可以使用Progress事件,但是我想再次交流更復雜的數據。 – staticfloat 2013-03-11 20:09:43

+0

@staticfloat - Yep LocalSettings值只能是8K的大小(足夠用於某些JSON序列化數據,但絕不是很多),您應該爲您的任務創建和客戶端/服務器套接字流提供代碼,因爲只要後臺任務是同一個進程的一部分,它應該能夠建立到本地主機服務器的流連接 – 2013-03-12 11:12:49

+0

我認爲這正是我的問題,後臺任務不在同一進程內運行,它們在backgroundTaskHost.exe進程中運行。會將我的代碼更改爲使用ControlChannelTrigger,因此我可以在同一個進程外殼中運行它,並查看它是否更好。 – staticfloat 2013-03-17 23:07:44