![](/img/trans.png)
[英]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.