2012-10-07 21 views
0

我的類開始新進程(Tshark)並開始捕獲,從主窗體我檢查類屬性以更新我的GUI,有時收到的數據包速率如此之高以至於我的GUI卡住了,所以我想要選擇每1-2秒檢查一下哪些屬性。 這是我的進度變化功能誰一直在檢查我的課程,在這一點上,我更新我的GUI,我如何每2秒檢查一次這些屬性?每隔幾秒對我的類屬性進行示例

Tshark tshark = new Tshark(); 

private void bgWSniffer_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    tshark = e.UserState as Tshark; 
    lblNumberOfReceivedPackets.Text = tshark._receivesPackets.ToString("#,##0"); 
    lblTrafficRate.Text = (tshark._bitsPerSecond * 0.000001).ToString("0.##") + " Mbit/sec" + " (" + tshark._bitsPerSecond.ToString("#,##0") + " Bits/sec" + ")"; 
    lblPacketsRate.Text = tshark._packetsPerSecond.ToString("#,##0") + " Packets/sec"; 
    lblStatus.Text = tshark._status; 
    lblFileSize.Text = formatBytes(tshark._myFile.Length); 
    tshark._myFile.Refresh();    
} 

回答

0

檢查自上次檢查以來是否經過了2秒。在這裏,我正在使用班級成員來描述那段時間。

private DateTime _LastCheck = DateTime.MinValue; 

    private private void bgWSniffer_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     if (_LastCheck.AddSeconds(2) <= DateTime.Now) 
     { 
      _LastCheck = DateTime.Now; 
      // do the UI update. 
     } 
    } 
+0

非常感謝! – user1710944

+0

您可能會發現,在某些邊緣情況下,UI不會隨着最後一組結果而更新,這取決於自從將邏輯構建到該事件處理程序中後最後一次ProgressChange被提出時。 – aqwert

0

,而不是更新的BackgroundWorker中的用戶界面,你可以只創建一個定時器來完成這項工作

private void bgWSniffer_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    tshark = e.UserState as Tshark; 
} 

在構造函數創建定時器:

_timer = new Timer() 
_timer.Intrerval = 2000; 
_timer.Tick += UpdateUI; 
_timer.Start(); 

你可以添加一些檢查數值是否已更改,以免不必要地更新UI:

private void UpdateUI() 
{ 
    var local = _tshark; 
    if(local != null) 
    { 
    lblNumberOfReceivedPackets.Text = local._receivesPackets.ToString("#,##0"); 
    lblTrafficRate.Text = (local._bitsPerSecond * 0.000001).ToString("0.##") + " Mbit/sec" + " (" + local._bitsPerSecond.ToString("#,##0") + " Bits/sec" + ")"; 
    lblPacketsRate.Text = local._packetsPerSecond.ToString("#,##0") + " Packets/sec"; 
    lblStatus.Text = local._status; 
    lblFileSize.Text = formatBytes(local._myFile.Length); 
    local._myFile.Refresh();  
    } 
} 
+0

非常感謝! – user1710944