2012-02-26 14 views
0

私は、位置情報サービスを使用するアプリを開発中です。私がデバッグしている場合、アプリは正常に動作します。私がデバッグせずに起動すると、最初の実行(再構築後)で、ロケーションサービスの使用許可を求めるときにクラッシュします。何が起こるかは、あなたがメッセージボックスの長さ(5〜10秒)を表示して座ってしまうと、クラッシュします。私は再度デバッグせずに起動する場合、それはうまく動作します(メッセージボックスを再度表示しませんが、何らかの理由でそれが条件文の後に次の行に移動するため、 「がt)が再び表示されます。なぜMessageBox.ShowがUnhandledExceptionを引き起こすのですか?

を繰り返しますが、私は、何の問題をデバッグしないのです場合。私は、デバッグなしで起動した場合、それは死ぬ。これは、デバッグのいずれかで構築するかのモードを解除する場合がある。私がコメントする場合

このコードブロックは問題なく実行されます。すぐに[OK]をクリックすると問題なく実行されます。

if (settings.FirstRunLocationPermission) 
       { 
        string message = "Do you wish to use location services to see your location on the map? Your location is not being tracked. You can change this authorization in the settings."; 
        //if (MessageBox.Show(message,"authorization",MessageBoxButton.OKCancel) == MessageBoxResult.OK) 
        //{ 
        //  settings.AllowLocation = true; 
        //} 
        settings.FirstRunLocationPermission = false; 
       } 

誰かが私になぜokをチェックする単純なメッセージボックスがこのような問題を引き起こすのかを説明することができれば感謝します。ありがとう!

答えて

1

あなたが方法については、MSDNのドキュメントを見れば、可能性のある例外の理由はかなり明確である:

MDSN - MessageBox.Show Method

他の可能性は設定のためのセッターで実行されているいくつかのコードがあるということです例外をスローしている.AllowLocationプロパティ。実際の例外がスローされた場合に役立ちます。

私はそれをこのように使用し、それが動作
+1

私はバックグラウンドで実行されているコードとは関係がありますが、それがセッターであるかどうかはわかりません(これはセッターにアクセスする唯一のコードです)。このコードブロックを自分の場所を示すボタンイベントに移動することで解決しました。もともとInitializeComponent()の直後に実行されていたので、UIが完全に描画されていなかったため、そのプロセスの背景にあるものがMessageBoxを妨害したようです。ありがとう! –

1

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

幸運

2

ほとんどの場合、あなたがOnNavigatedToでメッセージボックスを示しています。その場合はthis SO answerが役立ちます。問題は、ユーザーがボタンを押さなかった場合、フレームワークはナビゲーションが失敗したと考えているため、アプリケーションがクラッシュすることです。

はい、この現象は、デバッガが接続されていない場合にのみ発生します。

+0

この質問の鍵は、特定の時間が過ぎるとクラッシュすることです。 OnNavigatedToやライフサイクルハンドラなど、時間制限のある関数でコードを実行している必要があります。 – dmdrummond

関連する問題