我有一个UserControl
,用于向API发送HTTP请求。发送代码位于ViewModel
,但由UserControl调用,当前使用Load
事件。在等待HTTP请求完成时,我想展示一个GIF动画。
问题在于:一旦HTTP请求完成,我就可以成功地使用load事件显示gif并使其消失。但动画不起作用。这对gif本身来说不是问题,因为它在所有其他用法中都可以正常工作。问题似乎与以下事实有关:代码是从Load
事件调用的(而不是例如按钮点击)。
我可以添加一些代码,使gif动画正常吗?或者是否有比Load
更好的事件?
更新
我确实设法更改了代码,因此动画开始了。但很快又冻结了。我是使用picLoading.Show()
和picLoading.Update()
而不是整个Visible
来完成的。
加载事件(在用户控件中)
private async void MyUserControl_Load(object sender, EventArgs e)
{
// Display the loading animated gif
picLoading.Visible = true;
// Wait for the http request to complete
await viewModel.HttpRequestMethod(host, path);
// Once completed, hide the picture again
picLoading.Visible = false;
}
HTTP请求方法(在视图模型中)
public async Task<string> HttpRequestMethod(string host, string path)
{
HttpClient httpClient;
CookieContainer cookieContainer = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler()
{
CookieContainer = cookieContainer,
UseDefaultCredentials = true
};
httpClient = new HttpClient(handler)
{
BaseAddress = new Uri(host)
};
HttpResponseMessage httpResponse = httpClient.GetAsync(path).Result;
httpResponse.EnsureSuccessStatusCode();
return await httpResponse.Content.ReadAsStringAsync();
}