0

当我在此方法中调用 Pcap.Net 数据包捕获例程时,我应该如何检查 BackgroundWorker DoWork 方法中的 CancellationPending,该例程通过回调进行响应。我能想到的两个选择是:

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

将取消推迟到下一次补丁比赛没有错;这就是 BackgroundWorkers 应该如何工作的。

于 2010-07-21T02:59:23.670 回答
1

如果使用 OnPacketArrival 事件,则不需要 BGW。让它很容易停止,只需调用 StopCapture()。

另一种方式,GetNextPacket()确实需要一个 BGW。您必须以足够短的读取超时打开设备,以便您可以足够快地看到 CancellationPending 标志。您还必须处理在 UI 上显示它的开销,ReportProgress并不便宜。当您调用它的频率超过每秒约 1000 次时,它会冻结 UI。

我想知道我们是否在谈论同一个图书馆......

于 2010-07-21T03:14:42.063 回答