2009-12-18 86 views
0

我的C#WinForms UI有一些用户可以使用滑块调整的参数。 UI的很多部分可以基于滑块值进行交互式更新。但是,某些部件需要较长的计算时间,因此需要设置一些开销。我只想在用户停止移动滑块2秒后才启动此更新过程。什么是最好的方法来做到这一点?经过n秒后启动UI更新的最佳方式是什么?

回答

1

如果在2秒后有任何更改,您可以使用定时器控件重置UI。

计时器还会检查每次更改后标记的变量,因此只有当标志没有更改并且计时器超时时,UI才会被解压。

0

我会有一个私人实例成员引用一个线程计时器。当计时器达到2秒钟时,包含计算的事件将触发。所有滑块都会有一个更改监听器,它可以将计时器设置为0并启动计时器。

2

Reactive Framework将是完美的。如果你有C#3.5,你可以使用它。

Observable.FromEvent<ScrollEventArgs>(vScrollBar1, "Scroll") 
    .Throttle(TimeSpan.FromSeconds(2)) // Wait for two second alter all Scroll event ended 
    .ObserveOnWindowsForms() // Make the lambda expression run on the UI thread 
    .Subscribe(
     e => 
     { 
      // Update your stuff 
      labelControl1.Text = e.EventArgs.NewValue.ToString(); 
     }); 

可以摆脱ObserveOnWindowsForms通话,如果你不想让你的用户界面在运行LAMDA挂,但要确保你正确地访问你的UI组件,以避免交叉线程例外。

+0

整洁。我只是在编制我想要看的节日清单 - 我忘记了我想学习Rx框架,这让我想起了。谢谢。 – 2009-12-18 15:13:56

+0

我喜欢这个解决方案,即使流利的编程让我伤心。最重要的是它需要Rx库。 – Eric 2009-12-18 15:16:46

0

您需要使用此计时器:System.Windows.Forms.Timer。为什么?它在UI线程上执行,这意味着您不必使用InvokeRequired或BeginInvoke在UI线程上执行UI更新代码。

相关问题