如果事件没有再次触发,如何调用方法

时间:2015-12-27 22:00:31

标签: c# wpf dispatchertimer

我想在TextChanged事件中调用一个方法,只要事件在一秒内没有再次触发。

如何在WPF中完成此操作(可能使用DispatcherTimer)?

我目前使用此代码但未在MyAction()内调用Method

bool textchanged = false;

private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
    textchanged = true;
    DispatcherTimer dispatcherTimer = new DispatcherTimer();
    dispatcherTimer.Tick += (o, s) => { Method(); };
    dispatcherTimer.Interval = TimeSpan.FromSeconds(1);
    dispatcherTimer.Start();
}

void Method()
{
    if (!textchanged) //here always false
    {
        //never goes here
        MyAction();
    }
    //always goes here
}

1 个答案:

答案 0 :(得分:0)

将您的代码更改为以下内容:

DispatcherTimer dispatcherTimer = new DispatcherTimer();

private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
    if (dispatcherTimer.IsEnabled)
    {
        dispatcherTimer.Stop();
    }
    dispatcherTimer.Start();
}

void Method()
{
    dispatcherTimer.Stop();
    MyAction();
}

并在构造函数中的InitializeComponent();行之后直接添加:

dispatcherTimer.Tick += (o, s) => { Method(); };
dispatcherTimer.Interval = TimeSpan.FromSeconds(1);