gpt4 book ai didi

wpf - 如何强制显示忙碌指示符? (WPF)

转载 作者:行者123 更新时间:2023-12-03 10:08:38 25 4
gpt4 key购买 nike

我创建了一个繁忙的指示器——基本上是一个标志旋转的动画。我已将其添加到登录窗口并将 Visibility 属性绑定(bind)到我的 View 模型的 BusyIndi​​catorVisibility 属性。

当我单击登录时,我希望在登录时出现微调器(它调用 Web 服务来确定登录凭据是否正确)。但是,当我将可见性设置为可见,然后继续登录时,直到登录完成,微调器才会出现。在 Winforms 老式编码中,我会添加一个 Application.DoEvents。如何使微调器出现在 MVVM 应用程序的 WPF 中?

代码是:

        private bool Login()
{
BusyIndicatorVisibility = Visibility.Visible;
var result = false;
var status = GetConnectionGenerator().Connect(_model);
if (status == ConnectionStatus.Successful)
{
result = true;
}
else if (status == ConnectionStatus.LoginFailure)
{
ShowError("Login Failed");
Password = "";
}
else
{
ShowError("Unknown User");
}
BusyIndicatorVisibility = Visibility.Collapsed;
return result;
}

最佳答案

您必须使您的登录异步。您可以使用 BackgroundWorker去做这个。就像是:

BusyIndicatorVisibility = Visibility.Visible; 
// Disable here also your UI to not allow the user to do things that are not allowed during login-validation
BackgroundWorker bgWorker = new BackgroundWorker() ;
bgWorker.DoWork += (s, e) => {
e.Result=Login(); // Do the login. As an example, I return the login-validation-result over e.Result.
};
bgWorker.RunWorkerCompleted += (s, e) => {
BusyIndicatorVisibility = Visibility.Collapsed;
// Enable here the UI
// You can get the login-result via the e.Result. Make sure to check also the e.Error for errors that happended during the login-operation
};
bgWorker.RunWorkerAsync();

仅出于完整性考虑:有可能在登录发生之前让 UI 有时间刷新。这是通过调度程序完成的。然而,这是一个 hack,永远不应该使用 IMO。但如果您对此感兴趣,可以在 StackOverflow 中搜索 wpf doevents。

关于wpf - 如何强制显示忙碌指示符? (WPF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3725281/

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