2016-11-29 1 views
0

Ich habe ein Pivot-Steuerelement in meiner UWP-App. In Pivot_selectionchanged Ereignis habe ich geschrieben, um Nachrichtendialog zu zeigen.UWP-App stürzt ab, anstatt Nachrichtendialogfeld anzuzeigen

Nach dem Generieren des Pakets der uwp-App, nachdem ich auf Pivot-Element geklickt habe, sollten einige Warnmeldungsdialoge angezeigt werden, aber es wird nicht angezeigt, stattdessen stürzt die App ab. Dies ist nur bei einigen Geräten der Fall. Kann jemand den Grund kennen?

Der Code, den ich geschrieben habe, ist

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; 
     } 

    } 

und Code-Dialog Nachricht:

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

Vielleicht mit try/catch-Anweisungen umgeben Ihren Code, so dass Sie die Ausnahme finden können, was geschieht, wenn er abstürzt? Die Ausnahmebedingungsnachricht könnte Ihnen helfen, herauszufinden, was tatsächlich passiert. – Streltsov

+0

Sie müssen die Ausnahme Ihrer Anwendung veröffentlichen, um weitere Details zu erhalten. Vielen Dank! – RicardoPons

+0

Warum schlagen Leute vor, Code in try/catch-Anweisung zu verpacken, um eine Ausnahme zu finden? Das ist völlig unnötig und eine schreckliche Idee! ** Wenn eine Ausnahme ausgelöst wird, wird Ihr Debugger einbrechen und Sie sofort an diesem Punkt sehen. Sie brauchen nicht mehrere Catch-Blöcke, die Meldungsfelder anzeigen. ** Der globale unbehandelte Ausnahmehandler tut dies bereits! All das, was eine Menge try/catch-Blöcke hinzufügt, hilft dabei sicherzustellen, dass Ausnahmen stummgeschaltet werden und Sie nie gute Chancen haben, sie zu debuggen. –

Antwort

1

es sein kann, weil man eigentlich nicht wartet auf die Nachricht von Leere des Rückgabetyp zu zeigen, ändern zu Aufgabe:

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

und warten auf sie:

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

Sie müssen die Methode ändern und Asynchron:

private async void OpenBillPivot_SelectionChanged... 
+0

openbillpivot_selectionchanged ist ein Ereignis, also können wir das nicht ändern. – Sagar

+0

es ist ein Event-Handler und ich sehe keinen Grund, warum Sie es nicht async markieren können – RTDev