2013-04-24 84 views
0

不幸的是,在windows phone 7中,沒有像Android這樣的「廣播接收器」概念,所以我正在嘗試做類似的事情。wp7無法從後臺工作人員獲得當前頁面

在我的應用程序中,我運行一個調用函數的後臺工作器,完成後我必須刷新頁面中的一些數據。我不知道所需的頁面是否會在結束時成爲當前頁面,因此我必須進行測試。我發現這個代碼在一些論壇:

var frame = Application.Current.RootVisual as PhoneApplicationFrame; 
var startPage = frame.Content as PhoneApplicationPage; 

這給了我上運行時「System.UnauthorizedAccessException」例外。實際上,訪問所有Application.Current屬性給出了相同的例外。我試圖理解的是,如果我無法從後臺工作者或線程訪問當前頁面,爲什麼我仍然需要它?如果我在主UI線程中,我知道我站在正確的頁面上?我在這裏錯過了什麼嗎?

請幫

回答

1

只能從UI線程訪問Application.Current。使用Dispatcher.BeginInvoke從後臺線程來執行委託給UI線程:

Deployment.Current.Dispatcher.BeginInvoke(() => 
{ 
    // Your code needing Application.Current 
}); 
+0

我這樣做,但沒有執行開始調用中的代碼。斷點從大括號移動到大括號,我不知道爲什麼 – 2013-04-25 05:36:18

+0

@NadaNaoushi由於您將執行委託給另一個線程,因此不應該立即執行。爲了更容易調試,可以將該部分放在'BeginInvoke'中的一個單獨的函數中:'private void DoSomething(){your code ...}',然後'Deployment.Current.Dispatcher.BeginInvoke(DoSomething); ' – 2013-04-25 07:04:51