首页 > 解决方案 > iOS HttpClient 崩溃

问题描述

这是我的代码

         HttpClient client = new HttpClient();
         client.DefaultRequestHeaders.Accept.Add(new 
         MediaTypeWithQualityHeaderValue("application/json"));
         var jsonstring = await client.GetStringAsync("https://asdasdadasd" + 
              url);

出现这个错误:

2019-03-29 11:18:43.901 Eliant.App.iOS[3859:3548233] [AppCenterCrashes] 错误:+[MSWrapperLogger MSWrapperLog:tag:level:]/7 未处理异常:UIKit.UIKitThreadAccessException:UIKit 一致性错误:你是调用只能从 UI 线程调用的 UIKit 方法。在 UIKit.UIApplication.EnsureUIThread() [0x00020] 中

库/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS/UIK

it/UIApplication.cs:89 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS 中的 UIKit.UIGestureRecognizer.RemoveTarget (Foundation.NSObject 目标,System.IntPtr 操作)[0x00000] /UIKit/UIGestureRecognizer.g.cs:342 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS/UIKit/UIGestureRecognizer.cs 中的 UIKit.UIGestureRecognizer.OnDispose () [0x00016] :41 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS/UIKit/UIGestureRecognizer.g.cs:959 中的 UIKit.UIGestureRecognizer.Dispose (System.Boolean disposing) [0x00000]在 /Library/Frameworks/Xamarin.iOS.framework/Versions/12.6.0.16/src/Xamarin.iOS/Foundation/NSObject2.cs:143 中的 Foundation.NSObject.Finalize () [0x00000]

有任何想法吗?

注释掉 await client.GetStringAsync() 会使应用程序正常工作。我尝试在主线程上使用 Device invoke 运行它(即使我认为没有任何理由需要这样做?)我尝试过 .result 而不是 await,我尝试过 getasync( ).content.readstringasync 并且总是有同样的问题。

标签: xamarinxamarin.ios

解决方案


看起来您需要在 UI 线程上进行此调用(来自错误内容)。

您是否尝试过确保此代码在 UI 线程上运行?有关如何执行此操作的详细信息,请参阅此链接。

本质上,您应该执行以下操作:

InvokeOnMainThread ( () => {
    // code which needs to be run on UI thread
});

推荐阅读