如何在用WPF C#编写的代码中实现以下内容?
我有一个ElementFlow控件,在该控件中,我实现了一个SelectionChanged事件,该事件(根据定义)在控件的项选择发生更改时触发特定事件。
我想做的是:
这是为了确保只有在所选内容在2秒内未发生更改时才启动冗长的操作,但我不熟悉WPF的DispatcherTimer功能,因为当涉及到Windows的正常计时器时,我更了解它。
谢谢,
S.
发布于 2013-08-14 12:10:49
我已经想出了完整的代码如下:
DispatcherTimer _timer;
public MainWindow()
{
_myTimer = new DispatcherTimer();
_myTimer.Tick += MyTimerTick;
_myTimer.Interval = new TimeSpan(0,0,0,1);
}
private void ElementFlowSelectionChanged(object sender, SelectionChangedEventArgs e)
{
_counter = 0;
_myTimer.Stop();
_myTimer.Interval = new TimeSpan(0, 0, 0, 1);
_myTimer.Start();
}
private int _counter;
public int Counter
{
get { return _counter; }
set
{
_counter = value;
OnPropertyChanged("Counter");
}
}
private void MyTimerTick(object sender, EventArgs e)
{
Counter++;
if (Counter == 2)
{
_myTimer.Stop();
MessageBox.Show(“Reached the 2 second countdown”);
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler e = PropertyChanged;
if (e != null)
{
e(this, new PropertyChangedEventArgs(propertyName));
}
}发布于 2013-08-14 11:47:21
试试这个:
private int timerTickCount = 0;
private bool hasSelectionChanged = false;
private DispatcherTimer timer;在构造函数或相关方法中:
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 1); // will 'tick' once every second
timer.Tick += new EventHandler(Timer_Tick);
timer.Start();然后是一个事件处理程序:
private void Timer_Tick(object sender, EventArgs e)
{
DispatcherTimer timer = (DispatcherTimer)sender;
if (++timerTickCount == 2)
{
if (hasSelectionChanged) timer.Stop();
else MessageBox.Show("Hi there");
}
}最后,要使其工作,只需在选择根据您的hasSelectionChanged事件进行更改时设置SelectionChanged变量。
发布于 2013-08-14 11:49:17
下面是如何使用DispatherTimer的代码,您可以在其中添加自己的逻辑。那取决于你..。
private void ListBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(2000);
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, object e)
{
// show your message here..
}https://stackoverflow.com/questions/18230552
复制相似问题