xamarin - UIKit.UIKitThreadAccessException:UIKit 一致性错误:您正在调用只能从 UI 线程调用的 UIKit 方法
问题描述
我正在尝试运行此代码:
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);
});
当我这样做时,整个应用程序崩溃并且输出窗口显示此错误:
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
. 所有都会导致同样的错误。
有任何想法吗?我正在使用 Xamarin forms 4 pre 7。
解决方案
使用 Device.BeginInvokeOnMainThread
Device.BeginInvokeOnMainThread(() =>
{
//your code
});
推荐阅读
- excel - VBA根据单元格值更改行颜色
- solr - Hue Solr 搜索运行缓慢
- sql - sql server中基于ID的concat字符串
- scala - 比较 DF 结构数组 spark 中的值
- browser - android 默认浏览器是否支持 service worker?
- python-3.x - Visual Studio 代码上的 Python AutoIndent
- virtualization - 使用 Proxmox API 获取 CPU 型号名称
- jquery - 如何禁用 jqueryUI menu() 小部件的悬停行为并添加一个单击事件?
- wix - 如何在设置验证期间从合并的“Microsoft_VC141_CRT_x64.msm”中提取 MSVC rutime 库
- html - 具有第二列动态宽度和省略号的固定宽度表