我构建了一个捕获和播放Wireshark文件的应用程序,并将所有数据包发送到我的网卡。 在应用程序中,用户可以选择一个文件夹,该文件夹中的所有文件都被添加到列表框中并以无限循环播放。 对于我的应用程序,我使用的是Pcapdotnet DLL,但由于Wincap中的一个错误,在500个文件后,库试图访问文件并且应用程序崩溃,我构建了一个exe文件,它将我的接口号和文件路径作为参数。文件完成后播放exe文件关闭所以在这种情况下我可以播放超过500个文件而不会崩溃。
这是我的开始按钮,它开始播放列表框中的所有文件: sendQueue 是我的exe文件,我发送文件路径
private void btnStart_Click(object sender, EventArgs e)
{
shouldContinue = true;
this.Invoke((MethodInvoker)delegate
{
btnStart.Enabled = false;
btnStop.Enabled = true;
groupBoxAdapter.Enabled = false;
groupBoxRootDirectory.Enabled = false;
});
backGroundWorker = new BackgroundWorker();
backGroundWorker.WorkerReportsProgress = true;
backGroundWorker.DoWork += new DoWorkEventHandler(
(s3, e3) =>
{
for (int i = 0; i < lbFiles.Items.Count && shouldContinue; i++)
{
this.Invoke((MethodInvoker)delegate
{
lbFiles.SetSelected(i, true);
toolStripStatusLabel.Text = string.Format("Playing file no {0} of {1}", i + 1, lbFiles.Items.Count);
});
sendQueue((string)lbFiles.Items[i]);
}
});
backGroundWorker.RunWorkerAsync();
}
我想要做的是停止按钮以停止我的播放,将shouldContinue布尔变量更改为false并关闭所有正在播放我的文件的进程(SendQueue.exe),我的问题是该进程仍在运行。< / p>
bool shouldContinue = true;
private void btnStop_Click(object sender, EventArgs e)
{
shouldContinue = false;
foreach (Process prc in System.Diagnostics.Process.GetProcessesByName("SendQueue"))
{
prc.Kill();
prc.WaitForExit();
}
toolStripStatusLabel.Text = "Stop playing";
}