Таймер Silverlight - PullRequest
       16

Таймер Silverlight

2 голосов
/ 05 декабря 2009

Итак, у меня есть текстовое поле, которое отправляет данные обратно на сервер.

Я хочу отправить его, как только человек перестал печатать.

Мой мыслительный процесс состоял в том, чтобы иметь таймер и изменить текстовое поле, установить таймер на запуск (если он остановлен) и сбросить время обратного отсчета, скажем, 3 секунды, если оно уже запущено, и событие timer.Tick отправило изменения. ..

Есть ли лучший способ сделать это?

Есть ли один, который работает?

Ответы [ 3 ]

4 голосов
/ 05 декабря 2009

Вы можете использовать DispatcherTimer для этого. Просто запустите таймер, когда текстовое поле получает фокус, и всякий раз, когда происходит событие нажатия клавиши, отмечайте переменную, которая отмечает, что пользователь печатает. Что-то вроде:

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

Я не уверен, что это лучший подход (отправка таких данных), но он должен работать. Обратите внимание, что это только псевдо-код.

2 голосов
/ 05 декабря 2009

Лучшим способом было бы использовать RX framework , который поставляется либо отдельно, либо с Silverlight Toolkit:

Observable
    .FromEvent<KeyEventArgs>(MyTextBox, "KeyUp")
    .Select(_ => MyTextBox.Text)
    .Throttle(TimeSpan.FromSeconds(3))
    .Subscribe(SubmitWord);
1 голос
/ 05 декабря 2009

Используйте класс DispatcherTimer .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...