2009-12-18 79 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更新代碼。

相關問題