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();            
}
4

2 に答える 2

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.
        }
    }
于 2012-10-07T23:03:34.130 に答える
0

内のUIを更新する代わりにBackgroundWorker、タイマーを作成してジョブを実行できます

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

ctorでタイマーを作成します。

_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();      
   }  
}
于 2012-10-07T23:03:42.787 に答える