我想在用户点击页面上的登录按钮后显示ActivityIndicator对象。不幸的是,这样做有一个小问题,因为在整个方法完成之后,ActivityIndicator似乎更改了状态。这是我到目前为止编写的代码:
.ReadyState
当我在private void Login(object sender, EventArgs ev)
{
BusyIndicator.IsVisible = true; //<- here I want to show indicator
try
{
//some input validation, connection opening etc
ConnectionHandler.OpenConnection(ServerIP, "dmg", false);
}
catch (Exception e)
{
Logging.Error(e.Message, "Connection", e);
}
}
之后设置断点时,应用程序绝对没有变化。但是我注意到当方法完成时会显示指示器。这是此控件的正确行为吗?
为什么我需要这个?因为现场验证和与服务器的连接需要一些时间,所以我需要向用户显示后台发生了一些事情。登录功能大约需要1秒钟的时间,因此指示器可以快速显示和隐藏,甚至看不到任何变化。
用户点击按钮后如何立即显示指示器?
答案 0 :(得分:1)
您的问题是UI线程中正在执行Login()方法。因此,尽管设置了BusyIndicator.IsVisible = true;
,线程仍继续执行该方法以获取数据,因此UI不会响应。
解决方案,在另一个线程中运行OpenConnection:
private async void Login(object sender, EventArgs ev)
{
BusyIndicator.IsVisible = true; //<- here I want to show indicator
try
{
//some input validation, connection opening etc
await Task.Run(() => { ConnectionHandler.OpenConnection(ServerIP, "dmg", false);});
}
catch (Exception e)
{
Logging.Error(e.Message, "Connection", e);
}
}