所以我所拥有的是一个将数据提交回服务器的文本框。
我希望在此人停止输入后提交。
我的思维过程是有一个计时器并让文本框更改将计时器设置为启动(如果已停止)并重置倒计时时间,如果已经运行并且有计时器,请说3秒钟.Tick事件提交更改。 ..
有没有更好的方法呢?
有一个有效吗?
答案 0 :(得分:4)
您可以使用DispatcherTimer执行此操作。只需在文本框获得焦点时启动计时器,每当keydown事件发生时,标记一个记录用户正在键入的变量。类似的东西:
DispatcherTimer timer;
bool typing = false;
int seconds = 0;
public void TextBox_OnFocus(...)
{
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += new TickEventHandler(Timer_Tick);
timer.Start();
}
public void TextBox_LostFocus(...)
{
timer.Stop();
}
public void TextBox_OnKeyDown(...)
{
typing = true;
}
public void Timer_Tick(...)
{
if (!typing)
{
seconds++;
}
else
{
seconds = 0;
}
if (seconds >= 3) SubmitData();
typing = false;
}
我不确定这是最好的方法(提交这样的数据),但它应该有效。请注意,这只是伪代码。
答案 1 :(得分:2)
更好的方法是使用RX framework作为单独的下载或Silverlight Toolkit:
Observable
.FromEvent<KeyEventArgs>(MyTextBox, "KeyUp")
.Select(_ => MyTextBox.Text)
.Throttle(TimeSpan.FromSeconds(3))
.Subscribe(SubmitWord);
答案 2 :(得分:1)
使用DispatcherTimer类。