【问题标题】:C# - How To Make Loading gif Continue to RotateC# - 如何使加载的 gif 继续旋转
【发布时间】:2017-11-11 17:40:26
【问题描述】:

所以我在 Visual Studio 中使用 C# 工作,并且我有一个加载图像的 gif 图像,当我调用 Web 服务时需要它,因为获取所需数据需要一两分钟。 gif 可以正常旋转,但我的问题是当它调用 web 服务时,gif 停止旋转。有谁知道如何在通话时保持旋转?最好能够在 C# 而不是 HTML 中实现这一点。

【问题讨论】:

  • 你能分享你到目前为止所做的代码吗?
  • @Ignas 我无法真正将我的代码分享给 Web 服务调用,因为它太大了,但是 gif 正在使用 PictureBox Windows 窗体插入,但在整个过程中旋转良好,直到调用 Web 服务然后冻结
  • 它是桌面应用程序吗?您是否在与 Web 服务调用不同的线程中运行 UI/gif?
  • 使回调异步。
  • @Ignas 我不这么认为。 gif 和 web 服务调用实际上没有任何关系,只是它们都存储在同一个文件夹中

标签: c# visual-studio-2013 gif


【解决方案1】:

您可以通过使用 c# 的 async/await 来获得您正在寻找的行为。这是一个不会阻塞 UI 线程的示例。

这是一个表单的代码隐藏:一个带有旋转 gif 的图片框,一个用于报告状态的标签控件,以及一个用于启动进程的按钮。

private async void btnCallWebService_Click(object sender, EventArgs e)
{
    lblStatus.Text = "Running method...";
    string result = await LongRunningMethod();
    lblStatus.Text = result;
}

private async Task<string> LongRunningMethod()
{
    await Task.Delay(5000);
    return "Method complete";
}

在这种情况下,LongRunningMethod 将是您需要很长时间的 Web 服务调用。您应该使您的 Web 服务方法调用异步,并将返回类型设置为 Task。

编辑:

您可以从异步调用中返回任何类型。您提到您的网络呼叫的形式为:Result result = WebServiceCall(login, password);

您可以只创建一个异步调用 Web 服务方法的方法。

private async Task<Result> WebServiceCallAsync(string login, string password) 
{
     return WebServiceCall(login, password);
}

then you would use this method like:
Result result = await WebServiceCallAsync("user name", "password");

【讨论】:

  • Ehz 除了来自网络调用的字符串之外,您还能返回其他内容吗?因为我返回了一个对象,例如 Result result = WebServiceCall(login, password)。我怎么能把它合并到你的解决方案中,因为我目前遇到错误
  • Ehz 我按照您所说的进行操作,但在 Result result = await WebServiceCallAsync(...) 下收到一条错误行。它说“'await' 运算符只能在异步方法中使用。考虑使用 'async' 修饰符标记此方法并将其返回类型更改为 'Task'”。有什么建议吗?
  • 注意,在给出的第一个示例中,按钮单击的处理程序也应用了“异步”。您需要将“异步”添加到事件处理程序或链中将调用 WebServiceCallAsync 的任何其他方法
  • Ehz 这似乎删除了错误行,但调用 Web 服务时我的 gif 仍然冻结。我在调用 Web 服务之前将其变为可见,然后在 Web 服务完成后将其变为 false。有没有我必须在某个地方放置 loadingImg.Visible = true & false 才能继续旋转?另外:WebServiceCallAsync 下面有一条绿线,上面写着“此异步方法缺少 'await' 运算符并将同步运行。考虑使用 'await' 运算符等待非阻塞 API 调用,或 'await Task.Run(...) ' 在后台线程上执行 CPU 密集型工作。"
  • 您将需要展示您目前拥有的代码,并结合使用异步添加的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 2018-04-06
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
相关资源
最近更新 更多