UIKit.UIKitThreadAccessException: UIKit Consistency error: 您正在调用只能从 UI 线程调用的 UIKit 方法 [英] UIKit.UIKitThreadAccessException: UIKit Consistency error: you are calling a UIKit method that can only be invoked from the UI thread
问题描述
我正在尝试运行此代码:
I'm trying to run this code:
GetRepsButton.Command = new Command(async () =>
{
var url = @"https://url";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//crashes here
var test = await client.GetStringAsync(url);
});
当我这样做时,整个应用程序崩溃并且输出窗口显示此错误:
And when I do, the entire app crashes and the output window shows this error:
ROR: +[MSWrapperLogger MSWrapperLog:tag:level:]/7 Unhandled Exception:
UIKit.UIKitThreadAccessException: UIKit Consistency error: you are calling a UIKit method that can only be invoked from the UI thread.
at UIKit.UIApplication.EnsureUIThread () [0x00020] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS/UIKit/UIApplication.cs:89
at UIKit.UIGestureRecognizer.RemoveTarget (Foundation.NSObject target, System.IntPtr action) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS/UIKit/UIGestureRecognizer.g.cs:342
at UIKit.UIGestureRecognizer.OnDispose () [0x00016] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS/UIKit/UIGestureRecognizer.cs:41
at UIKit.UIGestureRecognizer.Dispose (System.Boolean disposing) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS/UIKit/UIGestureRecognizer.g.cs:959
at
Foundation.NSObject.Finalize () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS/Foundation/NSObject2.cs:143
Resolved pending breakpoint at 'SelectRep.xaml.cs:110,1' to void NameSpace.<ClientPicker_SelectedIndexChanged1>d__3.MoveNext () [0x0000c].
虽然我不认为我应该这样做,因为我没有对 UI 做任何事情,但我尝试过 InvokeOnMainThread
但它不起作用.我还尝试更改为 .Result 而不是 await,并且我尝试了 GetAsync
并读取内容,以及使用 WebClient
而不是 HttpClient代码>.所有这些都会导致同样的错误.
Although I dont think I should have to since i'm not doing anything with the UI, I have tried InvokeOnMainThread
which does not work. I've also tried changing to .Result instead of await, and I've tried GetAsync
and reading the content, along with using WebClient
instead of HttpClient
. All cause this same error.
有什么想法吗?我使用的是 Xamarin 表单 4 前 7.
Any ideas? I'm using Xamarin forms 4 pre 7.
推荐答案
Use Device.BeginInvokeOnMainThread
Use Device.BeginInvokeOnMainThread
Device.BeginInvokeOnMainThread(() =>
{
//your code
});
这篇关于UIKit.UIKitThreadAccessException: UIKit Consistency error: 您正在调用只能从 UI 线程调用的 UIKit 方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!