Silverlight Timer-Like功能

时间:2009-12-04 22:27:13

标签: .net silverlight silverlight-4.0

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

我希望在此人停止输入后提交。

我的思维过程是有一个计时器并让文本框更改将计时器设置为启动(如果已停止)并重置倒计时时间,如果已经运行并且有计时器,请说3秒钟.Tick事件提交更改。 ..

有没有更好的方法呢?

有一个有效吗?

3 个答案:

答案 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类。