• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - C# - Xamarin - HttpClient - 由于对象的当前状态,操作无效 - iOS

[复制链接]
菜鸟教程小白 发表于 2022-12-12 22:40:41 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在开发一个发出 HTTP 请求的跨平台库。它在 Android 上运行良好,但是当我尝试在 iOS 上使用它时出现异常,我不知道如何修复它。

这是我的代码:

// method from cross platform library

Task.Factory.StartNew(delegate
{
    try
    {
        var client = new HttpClient();
        // some other setup stuff
        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.post, "http://myurl.com...");

        var task = client.SendAsync(request);
        task.Wait(); // Exception thrown on this line

        var response = task.Result;

        var responseString = response.Content.ReadAsStringAsync().Result;
    }
    catch (Exception e)
    {
    }
}

task.Wait(); 我得到一个 System.AggregateException 内部异常 System.InvalidOperationException由于对象的当前状态,操作无效。

试图找到一些解决方案,我发现问题可能是通过在 UI 线程上调用它引起的。但这就是将这一切包装在 Task.Factory.StartNew 中的全部意义所在。

我已经尝试了所有我知道的方法,但仍未解决问题。任何帮助将不胜感激。

编辑:

我决定在 iPhone 模拟器上尝试我的解决方案。这是一个运行 iOS 10 的 iPhone 6 模拟器。我的物理设备是一样的。它可以在模拟器上运行,但由于某种原因不能在物理设备上运行……很奇怪。

编辑 2:

感谢@YuriS 找到解决方案。

发件人:https://forums.xamarin.com/discussion/36713/issue-with-microsoft-http-net-library-operation-is-not-valid-due-to-the-current-state-of-the-objec

你可以做的是: 1)转到ios项目的引用资料 2) 编辑引用文献 3)检查'System.Net.Http'

android 的行为是一样的。



Best Answer-推荐答案


这里描述的问题可能很少: https://forums.xamarin.com/discussion/36713/issue-with-microsoft-http-net-library-operation-is-not-valid-due-to-the-current-state-of-the-objec

https://bugzilla.xamarin.com/show_bug.cgi?id=17936

"Operation is not valid" error at Xamarin.iOS project with HttpClient

http://motzcod.es/post/78863496592/portable-class-libraries-httpclient-so-happy

似乎所有帖子都指向 System.Net.Http

不管问题如何,都有更好的方法来做到这一点。其中之一:

public static async Task PostRequest()
{
    try
    {
        HttpClient client = new HttpClient();
        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://myuri");
        //request.Headers.Add("", "");
        var response = await client.SendAsync(request);
        var responseString = await response.Content.ReadAsStringAsync();
    }
    catch (Exception ex)
    {

    }
}

如果你想等到函数完成你调用

await PostRequest();

如果您不需要等待,则只需在调用中省略“等待”或使用

PostRequest.ContinueWith((t)=>
{
});

您还需要在函数中处理异常,因此可能只返回 Task 并不是最好的。我只是根据原始函数签名来回答

关于ios - C# - Xamarin - HttpClient - 由于对象的当前状态,操作无效 - iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40244632/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap