2

所以我拥有的是一个将数据提交回服务器的文本框。

我想让它在这个人停止打字后提交。

我的想法是有一个计时器并让文本框更改将计时器设置为启动(如果停止)并将倒计时时间重置为 3 秒(如果它已经在运行)并让 timer.Tick 事件提交更改...

有没有更好的方法来做到这一点?

有没有一个有效的?

4

3 回答 3

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;
}

我不确定这是最好的方法(提交这样的数据),但它应该可以工作。请注意,这只是伪代码。

于 2009-12-04T23:12:56.327 回答
2

更好的方法是使用作为单独下载或 Silverlight Toolkit 提供的RX 框架:

Observable
    .FromEvent<KeyEventArgs>(MyTextBox, "KeyUp")
    .Select(_ => MyTextBox.Text)
    .Throttle(TimeSpan.FromSeconds(3))
    .Subscribe(SubmitWord);
于 2009-12-05T05:37:54.897 回答
1

使用DispatcherTimer类。

于 2009-12-04T23:14:13.470 回答