我是WPF的新手,仍在寻找一种简单的解决方案来临时停用我的应用程序中的按钮。这就是我在做的事情:
按钮点击:
private void Calculate_Click(object sender, RoutedEventArgs e)
{
this.AreButtonsEnabled = false;
System.Threading.Thread.Sleep(1000);
this.AreButtonsEnabled = true;
}
XAML:
<Button x:Name="OtherButton" IsEnabled="{Binding AreButtonsEnabled}" Content="OtherButton" HorizontalAlignment="Left" Margin="165,152,0,0" VerticalAlignment="Top" Width="75"/>
绑定按预期工作,但如果我激活和停用此一次调用中的按钮,则不会停用。如何让GUI正确停用按钮?
修改
通知事件(工作正常):
public partial class MainWindow : Window, INotifyPropertyChanged
{
private bool areButtonsEnabled;
public bool AreButtonsEnabled
{
get { return this.areButtonsEnabled; }
set { areButtonsEnabled = value; OnPropertyChanged(new PropertyChangedEventArgs("AreButtonsEnabled")); }
}
注意 我必须.Net 3.5。
答案 0 :(得分:1)
Thread.Sleep()
阻止UI线程。您可以使用async
点击处理程序代替Task.Delay()
:
private async void Calculate_Click(object sender, RoutedEventArgs e)
{
AreButtonsEnabled = false;
await Task.Delay(1000);
AreButtonsEnabled = true;
}
答案 1 :(得分:1)
最好是禁用按钮,然后启动/使用另一个线程来完成工作并在最后启用按钮(一种方法是在一种方法中使用async / await),这样UI将会保持负责任和最新。
伪代码:
private async void Calculate_Click(object sender, RoutedEventArgs e)
{
AreButtonsEnabled = false;
await Task.Run(()=>DoWork());
AreButtonsEnabled = true;
}