代码之家  ›  专栏  ›  技术社区  ›  Eric

经过n秒后启动UI更新的最佳方法是什么?

  •  0
  • Eric  · 技术社区  · 14 年前

    我的C WinForms用户界面有一些用户可以使用滑块调整的参数。用户界面的许多部分可以根据滑块值进行交互更新。然而,有些部分需要更长的计算时间,这需要一些开销来设置。我只想在用户停止移动滑块2秒后启动此更新过程。最好的方法是什么?

    4 回复  |  直到 14 年前
        1
  •  1
  •   Mark Redman    14 年前

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

    计时器还将检查在每次更改后标记的变量,因此只有当标记没有更改且计时器超时时,才会升级UI。

        2
  •  2
  •   Pierre-Alain Vigeant    14 年前

    这个 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,请调用,但请确保正确访问UI组件以避免跨线程异常。

        3
  •  0
  •   Jarrett Meyer    14 年前

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

        4
  •  0
  •   Will    14 年前

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