Wpf 如何摆脱被阻止的WinPcap API,即pcap_next_ex()?
在某些应用程序中,我使用WinPcap库捕获数据包。我正在使用WPF开发应用程序。在这里,我使用backgroundworker在while循环中调用pcap_next_ex()API。在这里,pcap_next_ex被阻止,它没有响应。因此我们的wpf应用程序挂起。我如何杀死后台工作人员,如何摆脱被阻止的APIWpf 如何摆脱被阻止的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
/*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()的用法吗?