Wpf 如何摆脱被阻止的WinPcap API,即pcap_next_ex()?

Wpf 如何摆脱被阻止的WinPcap API,即pcap_next_ex()?,wpf,backgroundworker,wireshark,winpcap,Wpf,Backgroundworker,Wireshark,Winpcap,在某些应用程序中,我使用WinPcap库捕获数据包。我正在使用WPF开发应用程序。在这里,我使用backgroundworker在while循环中调用pcap_next_ex()API。在这里,pcap_next_ex被阻止,它没有响应。因此我们的wpf应用程序挂起。我如何杀死后台工作人员,如何摆脱被阻止的API /*In WPF Application*/ worker.WorkerReportsProgress = true; worker.WorkerSupportsCa

在某些应用程序中,我使用WinPcap库捕获数据包。我正在使用WPF开发应用程序。在这里,我使用backgroundworker在while循环中调用pcap_next_ex()API。在这里,pcap_next_ex被阻止,它没有响应。因此我们的wpf应用程序挂起。我如何杀死后台工作人员,如何摆脱被阻止的API

/*In WPF Application*/
    worker.WorkerReportsProgress = true; 
    worker.WorkerSupportsCancellation = true;
    worker.DoWork += new DoWorkEventHandler(worker_DoWork);   
     worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProcessChanged);
     worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
public void Start_click(object sender, RoutedEventArgs e)
  {
     worker.RunWorkerAsync();
  }
private void worker3_DoWork(object sender, DoWorkEventArgs e)
{
 while(1)
  {
     status=getpacket();
    if(worker.cancelpending)
     {
          e.cancel=true;
          return;
     }
  }
 }
 /*In Vc++ dll*/
int status getpacket()
 {
     status=pcap_next_ex(pPcap,header, data);
 }`
我的问题是这里的pcap\u next\u ex()被阻塞了。如果我设置为56频道,它不会返回任何内容

我们怎样才能摆脱这种障碍

谢谢

libpcap/WinPcap的“读取捕获的数据包”api在默认情况下是阻塞的

你应该:

  • 在除了接收数据包之外不做任何事情的线程中调用
    pcap\u next\u ex()
    ,这样其他线程(包括您可能拥有的任何UI线程)就不会阻塞
  • pcap\u t*
    置于非阻塞模式,使用,为
    pcap\u t*
    获取一个
    句柄,您可以与事件循环一起使用或在事件循环中使用,并且,如果该
    句柄报告您可以读取数据包,则继续调用
    pcap\u next\u ex()
    ,直到失败为止-或者只需调用
    pcap\u dispatch()
    ,它将在不阻塞的情况下处理所有可用的数据包

  • 你能举例说明pcap_setnonblock()和pcap_getevent()的用法吗?