尽管process.kill()已执行,但进程仍在运行

时间:2012-12-28 15:45:02

标签: c# winforms

我构建了一个捕获和播放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";
}

0 个答案:

没有答案