2012-02-26 52 views
0

我正在使用位置服務的應用程序。如果我正在調試,該應用程序工作正常。如果我在沒有調試的情況下啓動(在重建後),在第一次運行時它會在請求使用位置服務的授權時崩潰。會發生什麼情況是,如果讓它坐下來,並顯示消息框足夠長的時間(5-10秒),就會崩潰。如果我在沒有再次調試的情況下啓動它,它仍然可以正常工作(儘管它不會再顯示消息框,因爲不知何故,它會在該條件語句之後通過該行到達下一行,它將首先運行設置爲false(我假設,因爲它沒有「再顯示)。爲什麼MessageBox.Show會導致UnhandledException?

再次,如果我調試,沒有問題。如果我開始沒有調試,它死。這是建設無論是在調試或發佈模式時的情況。

如果我評論這塊代碼出來了,它的執行沒有問題,如果我點擊確定,它就快速執行,它執行時沒有問題。如果任何人都可以向我解釋爲什麼一個簡單的messagebox檢查ok會導致這樣的問題,我很感激。謝謝!

回答

1

如果你看看MSDN文檔的方法,對於可能出現的異常的原因是相當清楚的:

MDSN - MessageBox.Show Method

另一種可能性是,有在二傳手運行設置一些代碼.AllowLocation屬性拋出異常。如果包含實際引發的異常,這將有所幫助。

+1

我相信它一定與後臺運行的代碼有關,但不確定它是否是setter(這是訪問setter的唯一代碼)。我確實通過將這段代碼移動到可以顯示自己位置的按鈕事件來解決這個問題。它最初是在InitializeComponent()後面運行的,所以UI還沒有被完全繪製,所以顯然這個過程的背景中的東西會干擾MessageBox。謝謝! – 2012-02-26 14:16:58

1

我使用這種方式,它的工作原理:

var msg = MessageBox.Show("Do you .... ?", "Title", MessageBoxButton.OKCancel); 
if(msg == MessageBoxResult.OK) 
{ 
    //Do something; 
} 

好運

2

最有可能你是顯示的OnNavigatedTo MessageBox中。如果是這種情況,this SO answer應該有所幫助。問題是如果用戶沒有按下按鈕,你的應用程序將會崩潰,因爲框架認爲導航失敗了。

是的,只有當調試器未連接時,纔會出現此行爲。

+0

這個問題的關鍵是它在特定時間後崩潰。您的代碼必須運行在時間受限的函數中,例如OnNavigatedTo或生命週期處理程序。 – dmdrummond 2013-04-12 09:29:34