Ich habe eine Xamarin Forms PCL-Anwendung mit Prism. Außerdem ist die Anwendung ein SignalR-Client. In der MainPage (die das Gerüst erstellt) ich Setup SignalR:Ausnahme beim Navigieren zu einer anderen Seite in Xamarin Forms mit Prism und SignalR
Dies funktioniert alles wie vorgesehen. Der SignalR-Server ruft das Join-Gruppenereignis ab. Mein Problem betrifft die empfangenen Ereignisse, d. H. Den Handler "NavigateToSignaturePad". Das Handler sieht wie folgt aus:
private async void NavigateToSignaturePad(string receiptText)
{
System.Diagnostics.Debug.WriteLine("Got a ShowSignatureControl event!");
Title = "Got a ShowSignatureControl event!";
try
{
//Device.BeginInvokeOnMainThread(async() => await navigationService.NavigateAsync("SignatureCapturePage"));
await navigationService.NavigateAsync("SignatureCapturePage");
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
Wie schon geschrieben ich die folgende Ausnahme erhalten, wenn die signalR Nachricht empfangen wird:
bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei Java.Interop.JniEnvironment + InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference Beispiel Java.Interop.JniMethodInfo Methode) [0x00068] in: 0 bei Android.Runtime.JNIEnv.CallVoidMet hod (System.IntPtr jobject, System.IntPtr jmethod) [0x0000e] in < 9ab9faae1b4b4f0da28e7c4ac61e2c78>: 0 bei Android.Views.IMenuInvoker.Clear() [0x00033] in < 9ab9faae1b4b4f0da28e7c4ac61e2c78>: 0 bei Xamarin.Forms. Platform.Android.AppCompat.NavigationPageRenderer.UpdateMenu () [0x0005a] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Platform.Android \ AppCompat \ NavigationPageRenderer.cs: 682 bei Xamarin.Forms.Platform. Android.AppCompat.NavigationPageRenderer.ToolbarTrackerOnCollectionChanged (System.Object-Absender, System.EventArgs-EreignisArgs) [0x00000] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xama rin.Forms.Platform.Android \ AppCompat \ NavigationPageRenderer.cs: 668 bei Xamarin.Forms.Internals.ToolbarTracker.EmitCollectionChanged() [0x00008] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ Interna \ ToolbarTracker.cs: 60 bei Xamarin.Forms.Internals.ToolbarTracker.OnPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs PropertyChangedEventArgs) [0x00052] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms. Core \ Interna \ ToolbarTracker.cs: 130 at (wrapper delegierten invoke) : invoke_void_object_PropertyChangedEventArgs (Objekt, System.ComponentModel.PropertyChangedEventArgs) bei Xamarin.Forms.BindableOb ject.OnPropertyChanged (System.String propertyname) [0x0000a] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ BindableObject.cs: 137 bei Xamarin.Forms.Element.OnPropertyChanged (System.String property) [0x00000] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ Element.cs: 379 bei Xamarin.Forms.BindableObject.SetValueActual (Xamarin.Forms.BindableProperty Eigenschaft, Xamarin.Forms.BindableObject + BindablePropertyContext Zusammenhang System.Object Wert, System.Boolean currentlyApplying, Xamarin.Forms.BindableObject + SetValueFlags Attribute System.Boolean silent) [0x000f4] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ BindableObject.cs: 581 bei Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty Eigenschaft, System.Object Wert, Xamarin.Forms.BindableObject + SetValueFlags Attribute Xamarin.Forms.BindableObject + SetValuePrivateFlags privateAttributes) [0x0014b] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ BindableObject.cs: 378 bei Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty-Eigenschaft, System.Object-Wert, System.Boolean vonStyle, System.Boolean checkAccess) [0x0005f] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ BindableObject.cs: 531 bei Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindablePropertyKey propertyKey, System.Object value) [0x0000e] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ BindableObject.cs: 9 1 bei Xamarin.Forms.NavigationPage.set_CurrentPage (Xamarin.Forms.Page Wert) [0x00000] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ NavigationPage.cs: 85 bei Xamarin.Forms. NavigationPage.PushPage (Xamarin.Forms.Page-Seite) [0x00011] in C: \ BuildAgent3 \ Arbeit \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ NavigationPage.cs: 371 bei Xamarin.Forms.NavigationPage + d__90.MoveNext() [0x0002f] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms.Core \ NavigationPage.cs: 350
--- Ende des Stack-Trace aus früheren Stelle, wo Ausnahme ausgelöst wurde --- bei -System .Runti me.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task Aufgabe) [0x0003e] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task Aufgabe) [0x00028] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading. Tasks.Task-Task) [0x00008] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.GetResult() [0x00000] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei Xamarin.Forms.NavigationPage + d__48.MoveNext() [0x0017f] in C: \ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin .Forms.Core \ NavigationPage.cs: 182
--- Ende der Stapelüberwachung von früheren Stelle, an der Ausnahme geworfen wurde --- bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in < 3fd174ff54b146228c505f23cf75ce71>: 0 um System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task System.Threading.Tasks.Task) [0x0003e] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task Aufgabe) [0x00028] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task Aufgabe) [0x00008] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.GetResult() [0x00000] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei Prism.Navigation.PageNavigationService + d__31.Movenext() [0x00139] in < 7a32c28f35024e719a93e31b4d1e3d2a>: 0 --- Ende der Stack-Trace aus früheren Stelle, wo Ausnahme ausgelöst wurde --- bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task Aufgabe) [0x0003e] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System .Threading.Tasks.Task-Task) [0x00028] in < 3fd174ff54b146228c505f23cf75ce71>: 0 a t System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task Aufgabe) [0x00008] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.GetResult() [0x00000] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei Prism.Navigation.PageNavigationService + <> c__DisplayClass17_0 + < b__0> d.MoveNext() [0x00091] in < 7a32c28f35024e719a93e31b4d1e3d2a>: 0 --- Ende des Stack-Trace aus früheren Stelle, wo Ausnahme ausgelöst wurde --- unter System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in < 3fd174ff54b1462 28c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task Aufgabe) [0x0003e] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System .Threading.Tasks.Task Aufgabe) [0x00028] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task Aufgabe) [0x00008] in < 3fd174ff54b146228c505f23cf75ce71>: 0 unter System.Runtime.CompilerServices.TaskAwaiter.GetResult() [0x00000] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei Prism.Navigation.PageNavigationService + d__24.MoveNext () [0x00125] in < 7a32c28f35024e719a93e31b4d1e3d2a>: 0 --- Ende des Stack-Trace aus früheren Stelle, wo Ausnahme ausgelöst wurde --- bei -System. Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task Aufgabe) [0x0003e] in < 3fd174ff54b146228c505f23cf75ce71>: 0 unter System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threa ding.Tasks.Task Aufgabe) [0x00028] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task Aufgabe) [0x00008] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.GetResult() [0x00000] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei Prism.Navigation.PageNavigationService + d__17.MoveNext () [0x00198] in < 7a32c28f35024e719a93e31b4d1e3d2a>: 0 --- Ende des Stack-Trace vom vorherigen Speicherort, an dem die Ausnahme ausgelöst wurde --- unter System.Runtime.ExceptionServices.ExceptionDispatchInfo.Werfen() [0x0000c] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task Aufgabe) [0x0003e] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task Aufgabe) [0x00028] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task Aufgabe) [ 0x00008] in < 3fd174ff54b146228c505f23cf75ce71>: 0 unter System.Runtime.Comp ilerServices.TaskAwaiter.GetResult() [0x00000] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei Prism.Navigation.PageNavigationService + d__14.MoveNext () [0x0016b] in < 7a32c28f35024e719a93e31b4d1e3d2a>: 0 --- Ende der Stapelüberwachung von früheren Ort, wo Ausnahme ausgelöst wurde --- bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks. Aufgabenaufgabe) [0x0003e] in < 3fd174ff54b146228c505f23cf75ce71>: 0 unter System.Runtime.CompilerServices.Ta skAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task Aufgabe) [0x00028] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task Aufgabe) [0x00008] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei System.Runtime.CompilerServices.TaskAwaiter.GetResult() [0x00000] in < 3fd174ff54b146228c505f23cf75ce71>: 0 bei ReceiptManager.SignatureCapture.ViewModels.MainPageViewModel + d__12.MoveNext () [0x0005a] in C: \ Repos \ ContentManagment.ReceiptManager.SignatureCapture \ Quell \ ReceiptManager.SignatureCapture \ ViewModels \ MainPageViewM odel.cs: 65 --- Ende der verwalteten Android.Util.AndroidRuntimeException stack trace --- android.view.ViewRootImpl $ CalledFromWrongThreadException: Nur der ursprüngliche Thread, der eine Ansichtshierarchie erstellt hat, kann seine Ansichten berühren. bei android.view.ViewRootImpl.checkThread (ViewRootImpl.java:6556) bei android.view.ViewRootImpl.requestLayout (ViewRootImpl.java:907) bei android.view.View.requestLayout (View.java:18722) bei android.view.View.requestLayout (View.java:18722) um android.view.View.requestLayout (View.java:18722) um android.view.View.requestLayout (View.java:18722) um android. view.View.requestLayout (View.java:18722) um android.view.View.requestLayout (View.java:18722) um android.widget.RelativeLayout.requestLayout (RelativeLayout.java:360) bei android.view. View.requestLayout (View.java:18722) um android.view.View.requestLayout (View.java:18722) um android.view.View.requestLayout (View.java:18722) um android.view.View.requestLayout (View.java:18722) um android.support.v7.widget.ActionMenuPresenter.updateMenuView (ActionMenuPresenter.java:231) bei android.support.v7.view.menu.MenuBuilder.dispatchPresenterUpdate (MenuBuilder.java:284) bei android.support.v7.view.menu.MenuBuilder.onItemsChanged (MenuBuilder.java:1030) bei android.support.v7.view.menu.MenuBuilder.clear (MenüBuilder.java: 589)
Warum ist es, dass die Eigenschaft Titel (auf ein Etikett auf der Mainpage gebunden) gerade fein aktualisiert, die Navigation zu einer anderen Seite jedoch ein UI-Thread Problem wirft?
Ich habe versucht, die Device.BeginInvokeOnMainThread -Methode auch (als Referenz für die Auskommentierung), und die Anwendung stürzt mit einer unbehandelten Ausnahme ab.
Ich bin auf Version 2.3.3.192 von Xamarin.Forms Visual Studio 2017 verwenden, um Android-Simulator bereitstellen. Vielen Dank.