所以我拥有的是一个将数据提交回服务器的文本框。
我想让它在这个人停止打字后提交。
我的想法是有一个计时器并让文本框更改将计时器设置为启动(如果停止)并将倒计时时间重置为 3 秒(如果它已经在运行)并让 timer.Tick 事件提交更改...
有没有更好的方法来做到这一点?
有没有一个有效的?
所以我拥有的是一个将数据提交回服务器的文本框。
我想让它在这个人停止打字后提交。
我的想法是有一个计时器并让文本框更改将计时器设置为启动(如果停止)并将倒计时时间重置为 3 秒(如果它已经在运行)并让 timer.Tick 事件提交更改...
有没有更好的方法来做到这一点?
有没有一个有效的?
您可以使用 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;
}
我不确定这是最好的方法(提交这样的数据),但它应该可以工作。请注意,这只是伪代码。
更好的方法是使用作为单独下载或 Silverlight Toolkit 提供的RX 框架:
Observable
.FromEvent<KeyEventArgs>(MyTextBox, "KeyUp")
.Select(_ => MyTextBox.Text)
.Throttle(TimeSpan.FromSeconds(3))
.Subscribe(SubmitWord);
使用DispatcherTimer类。