2011-08-11 36 views
5

我正在創建一個具有前臺應用程序(當然)以及PeriodicTask和ResourceIntensiveTask的應用程序。如何在Windows Phone上從前臺應用程序發出ScheduledTask信號?

我需要一種方法來關閉計劃的任務,如果用戶啓動應用程序本身,而他們正在運行。

我沒有看到全系統互斥這樣做的任何方式。理想情況下,當後臺任務開始時,一個線程將被剝離,從前臺應用程序監聽信號,如果它接收到該信號,則可以乾淨地關閉後臺任務。

除了輪詢(比如對特定文件的文件夾),沒有任何人對我的應用前景如何信號我的背景代理商倒閉,如果前臺應用程序啓動一個乾淨的建議嗎?

我正朝着套接字走,但這似乎是矯枉過正。

背景: 我目前使用IsolatedStorage來存儲我的數據(不是數據庫) - 最終我會轉向使用數據庫。

我的前臺應用程序同步本地數據與Web服務,並更新當新項目從Web服務添加了UI。我使用一個文件,通過查找數據項目,以及在新項目同步時追加哪些文件。

我想後臺代理運行在後臺執行此同步,更新孤立存儲中的文件,包括索引等。但只要我啓動前臺應用程序,我需要後臺應用程序停止,所以前景和背景不會同時嘗試更新相同的文件。

我只需要一個進程的時間來更新本地的數據,我需要前臺進程搶佔後臺進程。

+0

我會推動設計座席能夠在同一時間,應用程序運行。如果你有一個很好的例子,這意味着這是不可能的,那麼我有興趣聽到它。 –

+0

我已經添加了一些背景信息。實質上,我不能同時在兩個進程中修改同一個文件,而我希望前臺進程搶佔後臺進程。 – Damian

回答

5

沒有併發更新的解決方案:

應用(App()):

var m = new Mutex(false, "MyMutex"); 
m.WaitOne(); //When PeriodicTask runs wait 

if(lastSynchronization > 1.Minutes) 
{ 
    //Update only when your PeriodicTask not runs before 
} 

//ApplicationExit  
m.ReleaseMutex(); 

PeriodicTask(主線程):

var m = new Mutex(false, "MyMutex"); 
if(m.WaitOne(0)) // Dont wait for the handle 
{ 
    // Synchronization 

    m.ReleaseMutex(); 
} 
else 
{ 
    //Abort task (You dont want to wait for the main application) 
} 

停止PeriodicTask時應用程序啓動的解決方案:

應用(App()):

var m = new Mutex(false, "MyMutex"); 
m.WaitOne(); 

// Application  

m.ReleaseMutex(); 

PeriodicTask(單獨的線程):

​​

我認爲是在WP7可用成員的最佳解決方案:

http://msdn.microsoft.com/en-us/library/system.threading.mutex(v=VS.96).aspx

+0

我希望我的前臺應用程序發出我的週期性任務的信號 - 週期性任務可能已在運行。通過互斥實現互斥是很簡單的,但是信號傳遞......我不太確定。 – Damian

+0

當您的應用程序啓動時,它將獲取句柄,然後您的PeriodicTask不能再獲取句柄,並將離開while循環。明確? – Skomski

+0

因此,你有一個緊密的循環不斷獲得鎖和釋放它?這會吃掉CPU,不是嗎? – Damian

相關問題