[英]Why are Maximize/Minimize events causing the Close Button to be re-enabled after disabling it?
[英]Re-enabled the button after timer is zero
需要您的按钮帮助。 定时器归零后,它不会重新启用。 但是,在我单击 UI 或按钮并且计时器为零后,它会重新启用。 有任何想法吗? 谢谢。
这是命令:
RelayCommand _testCommand;
public ICommand TestCommand
{
get
{
if (_testCommand == null)
{
_testCommand = new RelayCommand(
(object o) =>
{
IsEnabled = false;
StartTimer(5);
}, (object j)=> IsEnabled );
}
return _testCommand;
}
set { _testCommand = null; }
}
这是财产:
bool _isEnabled = true;
bool IsEnabled
{
get { return _isEnabled; }
set
{
_isEnabled = value;
OnPropertyChanged();
}
}
方法:
private Timer timer1;
private int counter;
private void StartTimer(int cnt)
{
counter = cnt;
timer1 = new Timer();
timer1.Elapsed += OnTimedEvent;
timer1.Interval = 1000;
timer1.Start();
}
private void OnTimedEvent(object sender, ElapsedEventArgs e)
{
Console.WriteLine(counter);
counter--;
if (counter < 0)
{
timer1.Stop();
IsEnabled = true;
}
}
好的。 我想我回答了我自己的问题。 如果我错了,请纠正我,但有两件事正在发生。 一种是 ElapsedEventArgs 在不同的线程中执行。 二是按钮(UI)不会自动更新。 我必须调用CommandManager.InvalidateRequerySuggested();
强制更新。 将OnTimedEvent
方法更新为:
private void OnTimedEvent(object sender, ElapsedEventArgs e)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " " + counter);
counter--;
if (counter < 0)
{
Application.Current.Dispatcher.Invoke(() =>
{
IsEnabled = true;
timer1.Stop();
CommandManager.InvalidateRequerySuggested();
Console.WriteLine("The caller id now is " + Thread.CurrentThread.ManagedThreadId);
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.