2016-11-29 10 views
0

私のuwpアプリケーションにピボットコントロールがあります。 pivot_selectionchangedイベントで私はメッセージダイアログを表示するように書いています。メッセージダイアログボックスを表示する代わりにUWPアプリがクラッシュする

ピボットアイテムをクリックしたときにuwpアプリケーションのパッケージを生成した後、警告メッセージのダイアログが表示されるはずですが、その時点でアプリがクラッシュしています。 これは一部のマシンでのみ表示されます。 誰かが理由を知ることができますか?

private async void SimpleMessageDialog(string Message, string Title) 
{ 
    MessageDialog dialog = new MessageDialog(Message, Title); 
    dialog.CancelCommandIndex = 1; 
    await dialog.ShowAsync(); 
} 
+2

は多分のtry/catchステートメントでコードを囲みますか?例外メッセージは、実際に何が起きているのかを知るのに役立ちます。 – Streltsov

+0

詳細を確認するには、アプリケーションの例外を投稿する必要があります。ありがとうございました! – RicardoPons

+0

例外を見つけるためにtry/catch文でコードをラップすることを提案するのはなぜですか?これは完全に不要で、ひどいアイデアです! **例外がスローされると、デバッガが起動し、その時点ですぐにデバッガが表示されます。 **メッセージボックスを表示するcatchブロックの束は必要ありません。**未処理のグローバルな例外ハンドラは既にそれを行います!たくさんのtry/catchブロックを追加することは、例外が抑制され、デバッグするチャンスが決して得られないことを保証するのに役立ちます。 –

答えて

1

あなたが実際にメッセージを表示するために待っているされていないので、それがすることができ、空からの戻り値の型を変更します。

私が書いたコードは

private void OpenBillPivot_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    bool Isreturn = false; 
    bool IsExchange = false; 

    Isreturn = checkUserPermission(Constants.Return); 
    IsExchange = checkUserPermission(Constants.Exchange); 
    if (Application.Current.Resources[Constants.RETURNS].ToString() == Constants.FALSE_CAMELCASE) 
     Isreturn = false; 
    else 
     Isreturn = true; 
    if (Application.Current.Resources[Constants.EXCHANGES].ToString() == Constants.FALSE_CAMELCASE) 
     IsExchange = false; 
    else 
     Isreturn = true; 

    if ((txtblStatus.Text == "Cancelled" || txtblStatus.Text=="Draft") && (OpenBillPivot.SelectedIndex == 1 || OpenBillPivot.SelectedIndex == 2 || OpenBillPivot.SelectedIndex == 3)) 
    { 
     TransactionDetails.Visibility = Visibility.Collapsed; 
     ReturnDetails.Visibility = Visibility.Collapsed; 
     ExchangeDetails.Visibility = Visibility.Collapsed; 
     //SimpleMessageDialog(ResourceLoader.GetForCurrentView().GetString("PLEASE_CLEAR_THE_BILL"), ResourceLoader.GetForCurrentView().GetString("ALERT")); 
    } 

    else if (OpenBillPivot.SelectedIndex == 2) 
    { 
     if ((txtblStatus.Text == "Pending" && txtblBillDue.Text != Constants.ZERO)) 
     { 
      ReturnDetails.Visibility = Visibility.Collapsed; 
      ExchangeDetails.Visibility = Visibility.Collapsed; 
      SimpleMessageDialog(ResourceLoader.GetForCurrentView().GetString("PLEASE_CLEAR_THE_BILL"), ResourceLoader.GetForCurrentView().GetString("ALERT")); 
     } 

     else 
     { 
      if (!Isreturn) 
      { 
       ReturnDetails.Visibility = Visibility.Collapsed; 
       SimpleMessageDialog("Access Denied", ResourceLoader.GetForCurrentView().GetString("ALERT")); 
      } 
      else 
       ReturnDetails.Visibility = Visibility.Visible; 
     } 

    } 

とのメッセージ対話コードですタスクへ:

private async Task SimpleMessageDialog(string Message, string Title) 
{ 
    MessageDialog dialog = new MessageDialog(Message, Title); 
    dialog.CancelCommandIndex = 1; 
    await dialog.ShowAsync(); 
} 

、それを待つ:

await SimpleMessageDialog(ResourceLoader.GetForCurrentView().GetString("PLEASE_CLEAR_THE_BILL"), ResourceLoader.GetForCurrentView().GetString("ALERT")); 

あなたにも非同期する方法を変更する必要があります:あなたはそれがクラッシュした場合に発生する例外を見つけることができるように

private async void OpenBillPivot_SelectionChanged... 
+0

openbillpivot_selectionchangedはイベントなので変更できません。 – Sagar

+0

それはイベントハンドラであり、非同期にマークすることはできません – RTDev

関連する問題