gpt4 book ai didi

c# - Xamarin Android DownloadString 需要很长时间甚至无法工作

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:29 24 4
gpt4 key购买 nike

我昨天开始使用 Xamarin for Android,是的,它非常好。当然,我和每个人一样,肯定会有一些错误。

我尝试的只是使用以下代码行异步下载 www.google.com 的 HTML:

    private async void btnAuthenticate_Click(object sender, System.EventArgs e)
{
Toast.MakeText(this, "method is being called", ToastLength.Long).Show();
string test = await Task.Run(() => new WebClient().DownloadString("http://google.de/"));
Toast.MakeText(this, test, ToastLength.Long).Show();
}

单击按钮时,会出现 Toast“正在调用方法”,几乎没有其他内容。起初它至少需要 1 1/2 分钟才能显示出一些 react ,要么应用程序崩溃,什么都不做,要么打印出我想要的内容。让我们说在 10 次尝试中它打印出预期的 2 倍。

我用 WPF C# 桌面应用程序尝试了相同的代码,它工作正常。

应用程序甚至不会卡住或发生其他情况。调试器的输出大致相同:

“ worker 开始”或者有时它说“爬山,改变最大线程数 x”或者“线程开始:#X”我不知道这是否相关。

此外,我正在使用 Visual Studio 2015 和 Xamarin for Android(目前为 30 天试用版)。

编辑:我修改了应用程序以在应用程序以相同行为启动后立即开始下载网页。然后我从中创建了一个 logcat 日志,您可以看到 here .

Edit²:这次我还使用 Xamarin Studio 创建了一个新项目。我修改了以下内容:

  1. 添加了 list 的 Internet 权限。
  2. 根据我的需要更改了默认按钮代码。

这是这个应用程序的源代码,有人可以自己尝试一下并告诉我是否也需要超过 30 秒才能发出这个 web 请求,实际上应该在 1-2 秒内完成。 Here is the demo project .

希望大家帮帮我。提前致谢。

最佳答案

您的代码的异步性质没有任何问题; Toast 仅用于显示 消息。

对我来说,对 http://google.de/ 的网络请求包含大约 48k 个字符。为 Toast 提供那么多内容会导致它在构建要呈现到屏幕的 View 时锁定 UI 线程。

您可以通过在 Web 请求周围包装一个进度对话框来验证代码确实是异步的:

var pd = ProgressDialog.Show(this, "Downloading...", "Fetching content from \"http://google.de/\""); 
string content = await Task.Run(() => new WebClient().DownloadString("http://google.de/"));
pd.Dismiss();

您会注意到 ProgressDialog 将出现并旋转(这意味着 web 请求在后台线程中,因为 UI 未锁定)并且当 web 请求时它将关闭任务完成。

关于c# - Xamarin Android DownloadString 需要很长时间甚至无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34583685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com