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.
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
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