Comment vérifier un CancellationPending dans une méthode BackgroundWorker DoWork, lorsque dans cette méthode j'appelle une routine de capture de paquets Pcap.Net, qui répond par un rappel. Les deux options que je peux penser est:comment vérifier pour BackgroundWorker.CancellationPending quand mon thread a appelé un autre?
a) écrire une boucle au fond de la méthode DoWork pour vérifier en permanence pour CancellationPending
b) mettre le contrôle dans la méthode de rappel, j'ai écrit ce qui Pcap.Net sera rappeler dans - mais sans aucun doute le problème potentiel ici est l'annulation ne peut pas fonctionner alors jusqu'à ce qu'un autre match patch se produit et il y a un rappel
suggestions?
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
}
}
donc j'allais agréger les réponses de paquets en 1 seconde résumés, seulement calculer un chiffre de synthèse pour la période de 1 seconde, puis une fois par seconde nourrir ce retour à l'interface utilisateur. Je pensais que le déchargement de cette agrégation à un arrière-plan du thread UI serait une bonne chose à faire – Greg
Ça va. Utilisez GetNextPacket avec le délai d'attente, l'événement sera déclenché sur le mauvais thread. Obtenir les intervalles de 1 seconde sera un peu difficile. –
en fait c'est http://pcapdotnet.codeplex.com/ bibliothèque (pas sharppcap) en fait désolé – Greg