0

このメソッド内で、コールバック経由で応答する Pcap.Net パケット キャプチャ ルーチンを呼び出すときに、BackgroundWorker DoWork メソッド内で CancellationPending を確認するにはどうすればよいですか。私が考えることができる2つのオプションは次のとおりです。

a) DoWork メソッドの最後にループを記述して、CancellationPending を継続的にチェックします。

b) 私が書いた Pcap.Net がコールバックするコールバック メソッドにチェックを入れます。

提案?

public class MainClass {
       private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
       {
            var worker = sender as BackgroundWorker;
            _packetCapturer = new PacketCapturer();
        }

}

    public class PacketCapturer

      public PacketCapturer() {
         // Start Capture Here
         // Opens PacketCommunicator
         // communicator.ReceivePackets(0, PacketCapturerCallback);

      }

      private static void PacketCapturerCallback(Packet packet) {
         // Deal with returned packet

      }

    }
4

2 に答える 2

1

OnPacketArrivalイベントを使用する場合は、BGWは必要ありません。StopCapture()を呼び出すだけで、簡単に停止できます。

逆に、GetNextPacket()にはBGWが必要です。CancellationPendingフラグをすぐに確認できるように、読み取りタイムアウトを十分に短くしてデバイスを開く必要があります。また、UIに表示するオーバーヘッドにも対処する必要があります。ReportProgressは安くはありません。また、1秒間に約1000回以上呼び出すと、UIがフリーズします。

同じ図書館について話しているのだろうか...

于 2010-07-21T03:14:42.063 に答える
1

次のパッチが一致するまでキャンセルを遅らせても問題はありません。これが BackgroundWorkers の動作方法です。

于 2010-07-21T02:59:23.670 に答える