如何在BackgroundWorker DoWork方法中检查CancellationPending,在此方法中,我调用Pcap.Net数据包捕获例程,该例程通过回调进行响应。我能想到的两个选择是:
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
}
}
答案 0 :(得分:1)
在下一个补丁匹配之前延迟取消没有错;这就是BackgroundWorkers的工作方式。
答案 1 :(得分:1)
如果您使用OnPacketArrival事件,则不需要BGW。使其易于停止,只需调用StopCapture()。
另一方面,GetNextPacket() 需要一个BGW。您必须打开设备,其读取超时足够短,以便您可以足够快地看到CancellationPending标志。您还必须处理在UI上显示它的开销,ReportProgress 不便宜。并且当你每秒调用它时,会冻结用户界面的频率超过每秒1000次。
我想知道我们是否在谈论同一个图书馆......