C#-如何使加载gif继续旋转

C#-如何使加载gif继续旋转,c#,visual-studio-2013,gif,C#,Visual Studio 2013,Gif,所以我在C#的Visual Studio中工作,我有一个加载图像的gif,当我调用web服务时需要它,因为获取所需的数据需要一两分钟。gif旋转良好,但我的问题是,当它调用web服务时,gif停止旋转。有人知道如何在打电话时保持旋转吗?最好能在C语言而不是HTML语言中实现这一点。您可以通过使用C语言的async/await获得所需的行为。下面是一个不会阻塞UI线程的示例 这是表单背后的代码:一个带有旋转gif的图片框、一个报告状态的标签控件和一个启动流程的按钮 private async vo

所以我在C#的Visual Studio中工作,我有一个加载图像的gif,当我调用web服务时需要它,因为获取所需的数据需要一两分钟。gif旋转良好,但我的问题是,当它调用web服务时,gif停止旋转。有人知道如何在打电话时保持旋转吗?最好能在C语言而不是HTML语言中实现这一点。

您可以通过使用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";
}
private async void btnCallWebService\u单击(对象发送方,事件参数e)
{
lblStatus.Text=“运行方法…”;
字符串结果=等待LongRunningMethod();
lblStatus.Text=结果;
}
专用异步任务LongRunningMethod()
{
等待任务。延迟(5000);
返回“方法完成”;
}
在本例中,LongRunningMethod将是需要很长时间的web服务调用。您应该使web服务方法调用异步,并使任务的返回类型为

编辑:

您可以从异步调用返回任何类型。您提到您的web调用的形式是:Result=WebServiceCall(登录,密码)

您可以创建一个异步调用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");
专用异步任务WebServiceCallAsync(字符串登录,字符串密码)
{
返回WebServiceCall(登录名、密码);
}
然后您将使用以下方法:
结果=等待WebServiceCallAsync(“用户名”、“密码”);

你能分享你到目前为止所做的工作的代码吗?@Ignas我不能真正将我的代码分享给web服务调用,因为它太大了,但gif是使用PictureBox Windows窗体插入的,但在调用web服务之前一直旋转良好,然后将其冻结为桌面应用程序?您是否在web服务调用的单独线程中运行UI/gif?使回调异步。@Ignas我不这么认为。gif和web服务调用实际上没有任何关系,只是它们都存储在同一个文件夹中hz您可以从web调用返回字符串以外的其他内容吗?因为我返回了一个对象,比如Result=WebServiceCall(登录名,密码)。我怎么能将此合并到您的解决方案中,因为我当前收到了错误Ehz我遵循了您所说的,但在Result Result=wait WebServiceCallAsync(…)下收到了错误行。它说,“等待”操作符只能在异步方法中使用。考虑用“异步”修饰符标记该方法,并将其返回类型改为“任务”。注意,在给出的第一个示例中,按钮单击的处理程序也应用了“异步”。您需要将“async”添加到事件处理程序或链中调用WebServiceCallAsynchehz的任何其他方法。这似乎可以删除错误行,但调用Web服务时,my gif仍然冻结。我在调用web服务之前将其变为可见,然后在web服务完成后将其变为false。是否必须在某个地方放置loadingImg.Visible=true&false才能继续旋转?旁白:WebService EncasyNC下面有一条绿色的线,上面写着“这个异步方法缺少‘等待’”运算符并将同步运行。考虑使用“Acess”操作符等待非阻塞API调用,或者“等待任务。运行(…)”在后台线程上执行CPU绑定的工作。“您需要显示您迄今为止的代码,合并使用async添加的内容