使用Rx进行去抖动

时间:2013-11-03 11:08:22

标签: windows-phone-8 system.reactive

有人建议我应该使用Rx去除AutoCompleteBox的输入,其中建议列表来自Web服务。显然,我不想对每次键击的更新运行缓慢的查询,但另一方面,在用户暂停后你也不需要太长的延迟。

我这样做了

public partial class MainPage : PhoneApplicationPage
{
  Timer _timerName;

  public MainPage()
  {
    InitializeComponent();
    _timerName = new Timer(QueryForNameSuggestions);
  }

  void QueryForNameSuggestions(object state)
  {
    //
  }

  private void searchtermName_TextChanged(object sender, RoutedEventArgs e)
  {
    //Each keystroke resets the timer, 500ms after you stop typing it queries
    _timerName.Change(500, Timeout.Infinite);
  }

}

这很容易理解,效果很好;每次击键(重新)开始半秒等待在查询中达到高潮。

我真的不知道如何用Rx做同样的事情,但我愿意接受这将是一个改进的可能性。有人能告诉我如何使用Rx完成这项工作,并解释一下Rx方式有什么好处?

Rx: How can I respond immediately, and throttle subsequent requests似乎很接近,但我没有看到你如何检测传入的击键而没有轮询AutoCompleteBox的值,这对我来说似乎不是一个改进。

1 个答案:

答案 0 :(得分:2)