2016-04-23 4 views
5

Meine UWP-App stürzt im Freigabemodus ab und funktioniert im Debug-Modus, aber ich kann nicht auf das Problem hinweisen, aber ich weiß, dass es damit zusammenhängt eine Kombination aus dem Auslösen eines Ereignisses aus System.Threading.Timer und MVVMLight.UWP Windows 10 App stürzt im Freigabemodus ab, funktioniert aber im Debug-Modus

Ich habe eine neue Dummy-Anwendung erstellt und verwende den gleichen Code (ZXing.net.mobile, wo ich 2 portable Bibliotheken verwendet und ich meine eigene Benutzersteuerung, die eine vereinfachte Version von ihnen ist - ich verwende Ereignisse statt <Action>). Das funktioniert gut, und ich versuche derzeit, weitere Schritte zu unternehmen, d. H. Mvvmlight und Navigation, aber bis jetzt kann ich das Problem in dieser Dummy-App nicht reproduzieren.

Der Fehler Ich erhalte ist:

Unhandled exception at 0x58C1AF0B (mrt100_app.dll) in Company.MyApp.App.exe: 
0xC0000602: A fail fast exception occurred. Exception handlers will not be 
invoked and the process will be terminated immediately. 

Gefolgt von:

Unhandled exception at 0x0107D201 (SharedLibrary.dll) in 
Company.MyApp.App.exe: 0x00001007. 

Wenn im Fenster Threads suchen, eine der Worker-Thread hat die folgenden Informationen, wenn diese Hilfe ist.

Not Flagged > 4012 0 Worker Thread <No Name> 
    System.Private.Interop.dll!System.Runtime.InteropServices. 
    ExceptionHelpers.ReportUnhandledError Normal 
    [External Code] 
    System.Private.Interop.dll!System.Runtime.InteropServices.ExceptionHelpers. 
    ReportUnhandledError(System.Exception e) Line 885 
    System.Private.Interop.dll!Internal.Interop.InteropCallbacks.ReportUnhandledError 
    (System.Exception ex) Line 17 
    System.Private.WinRTInterop.CoreLib.dll!Internal.WinRT.Interop.WinRTCallbacks. 
    ReportUnhandledError(System.Exception ex) Line 274 
    System.Private.CoreLib.dll!System.RuntimeExceptionHelpers.ReportUnhandledException 
    (System.Exception exception) Line 152 
    System.Private.Threading.dll!System.Threading.Tasks.AwaitTaskContinuation. 
    ThrowAsyncIfNecessary(System.Exception exc) Line 784  
    System.Private.Threading.dll!System.Threading.WinRTSynchronizationContext.Invoker. 
    InvokeCore() Line 182 
    System.Private.Threading.dll!System.Threading.WinRTSynchronizationContext.Invoker. 
    Invoke(object thisObj) Line 162  
    System.Private.CoreLib.dll!System.Action<System.__Canon>. 
    InvokeOpenStaticThunk(System.__Canon obj) 
    System.Private.WinRTInterop.CoreLib.dll!Internal.WinRT.Interop.WinRTCallbacks.PostToCoreDispatcher.AnonymousMethod__0() Line 266  
    MyCompany.MyApp.App.exe 
    MyCompany.MyApp.App.ViewModels.ValidateHandler.Invoke(string pin) 
    MyCompany.MyApp.App.McgInterop.dll!McgInterop.ReverseComSharedStubs 
    .Proc_(object __this, System.IntPtr __methodPtr) Line 6163 
    MyCompany.MyApp.App.McgInterop.dll!Windows.UI.Core.DispatchedHandler__Impl.Vtbl.Invoke__STUB(System.IntPtr pComThis) Line 45147  
    [External Code] 

In meinem QR-Code-Usercontrol, eine System.Threading.Timer ist mit und es wirft ein Ereignis, wenn ein QR-Code gefunden wird:

timerPreview = new Timer(async (state) => 
{ 
    .... 
    // Check if a result was found 
    if (result != null && !string.IsNullOrEmpty(result.Text)) 
    { 
    Debug.WriteLine("Barcode Found: " + result.Text); 
    if (!this.ContinuousScanning) 
    { 
     delay = Timeout.Infinite; 
     await StopScanningAsync(); 
    } 
    else 
    { 
     delay = this.ScanningOptions.DelayBetweenContinuousScans; 
    } 
    OnBarcodeFound(result.Text); 
    } 

    timerPreview.Change(delay, Timeout.Infinite); 

}, null, 
    this.ScanningOptions.InitialDelayBeforeAnalyzingFrames, 
    Timeout.Infinite); 

auf der Seite, die das QRCode Usercontrol Host, ich habe den folgenden Code bekam:

private async void ScannerControl_BarcodeFound(string barcodeValue) 
{ 
    var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher; 

    await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => { 
     Debug.WriteLine(barcodeValue); 
     GetViewModel.BarcodeFound(barcodeValue); 
    }); 
} 

Wie Sie sehen, ich bin der QrCode Wert auf meine Viewmodel und von dort vorbei, ich eine Nachricht geschickt und dann wieder direkt auf eine andere Seite:

Ich könnte weitermachen und zusätzlichen Code zur Verfügung stellen, aber wie ich zusätzliche Haltepunkte hinzufügen, kann ich sehen, dass der Code und die Übergabe des richtigen Werts und an den richtigen Speicherort, aber schließlich wirft es diesen Fehler. Wenn ich zusätzliche Fehler-Handler oder Dispatcher-Code hinzufüge, funktioniert es schließlich und geht wie erwartet zur nächsten Seite, aber wenn ich auf eine Schaltfläche in meiner CommandBar klicke, dauert es eine Weile und es wirft schließlich den gleichen Fehler auf, also durch Hinzufügen dieser zusätzlichen Ich denke, ich dränge das Problem nur noch weiter nach unten.

Jeder hat irgendwelche Vorschläge, wie ich dieses Problem umgehen kann. Ich wünschte, ich könnte die volle App teilen, aber definitiv nicht. Ich weiß also, dass es schwierig sein wird, eine Lösung anzubieten, aber wenn jemand Vorschläge hat, würde ich sie zu schätzen wissen. Wie gesagt, ich denke, das Problem ist das Ergebnis einer Kombination aus Threading und mvvmlight, aber es macht mich wahnsinnig, dass meine Test-App bisher genau so funktioniert wie erwartet, also bin ich mir ziemlich sicher, dass es nicht Zxing oder mein ist Nutzerkontrolle.

Jede Hilfe, Vorschläge würden sehr geschätzt werden oder wenn Sie mich benötigen, um zusätzliche Informationen zur Verfügung zu stellen, lassen Sie mich bitte wissen, was und ich werde versuchen, es zu liefern.

Danke.

+0

Ist es vielleicht ein Problem mit .NET Native kompilierten Code in relase verwendet? Haben Sie das Debuggen mit der Option "Kompilieren mit .NET Native Toolchain" aktiviert? – Plac3Hold3r

+0

Hallo, das habe ich bereits ausprobiert und ich habe es auch mit dem 'Optimize Code' ausprobiert und stoße trotzdem im Debug-Modus nicht ab. – Thierry

Antwort

0

Nun, das war eine mühsame Übung und eine große Verschwendung meiner Zeit!

Es war nur ein paar Dinge !!

  1. Ich verwendete einen anderen DataService im Release Modus, der nicht implementiert wurde. Durch implementiert, meine ich, dass alle meine Funktionen die NotImplementedException oder null Werte zurückgaben.

  2. Als ich mein Modell an mein ViewModel übergab, habe ich nicht überprüft, ob es null war, was zu unbehandeltem exceptions führte.

  3. Ich hatte eine Kette von mvvmlight Ereignisse (Messenger.Default.Send <>) ausgelöst wurde und keiner auf Fehler oder Null-Werte überprüft.

Während alle diese durch schlechte Validierung von meinen Teil verursacht wurden, sind extrem schlecht diese Fehler in Release Modus gemeldet! Wenn ich von Anfang an eine NullReferenceException oder irgendeine Art von Ausnahmen erhalten hätte, hätte ich sofort die richtige Richtung eingeschlagen, aber Fehler wie die, die ich hatte, waren völlig nutzlos, aber es war nichts als eine Lektion !!

Alles, was ich sagen kann, ist, dass wenn Sie dieses Problem jemals passiert, verschwenden Sie nicht Ihre Zeit, Code neu zu schreiben oder versuchen, Workarounds zu finden. Arbeite dich zuerst durch deinen Workflow/die Kette von Ereignissen und hoffentlich wirst du schließlich den Schuldigen erwischen.

Hoffe, das hilft.

+0

Hallo, meine App hat das gleiche Problem. Das letzte Mal (wie vor 6 Monaten), habe ich die App deinstalliert, neu gestartet und wieder installiert und alles war in Ordnung. Also ich denke nicht, dass Sie oder meine Lösung dies eine echte Lösung ist. Jetzt habe ich wieder den Fehler, aber ich möchte nicht wie das letzte Mal neu installieren versuchen, ich möchte den Fehler in erster Linie ausgraben. Damals habe ich gelesen, dass dieser ddl-Fehler durch viele Probleme auf der Systemseite verursacht werden kann, die DLL-Datei nicht lesen. Oder - was anscheinend mein Fall gewesen ist, irgendeine Art von verpatzten Verweisen in der Registrierung, weil ich Zugriff auf Bilderverzeichnis benötigt habe. –

+0

Also, hast du dieses Problem jemals wieder bekommen und es anders gelöst? –

0

Leider hatten wir es mit einem ähnlichen Problem zu tun. Unser war mit der Festlegung der Qualifier-Werte für die Änderung der Lokalisierung im laufenden Betrieb in der App beschäftigt, kam aber mit mystery fail fast/SharedLibrary nativen Fehlern auf. Das Aktualisieren des Microsoft.NETCore.UniversalWindowPlatform-Paket von 6.0.4 zu 6.0.7 scheint das Problem zu beheben.

Nur daran gedacht, weil ein anderer Ort, an dem ich diesen Fehler recherchiert, jemand ein SharedLibrary Problem durch die Aktualisierung ihres NETCore-Pakets zu lösen, war dieser Fall ein früheres (5.x), aber dachte, es war einen Versuch wert.