为什么流程数量存在差异?

时间:2014-12-18 02:00:52

标签: c# vb.net process

我试图在DataGridView中列出所有进程。

当我对前两行进行调暗并读取总进程数时,它可能是一个类似于191个进程的数字。但是,添加每个进程的循环最终会得到一个数字,通常是总数的一半左右?我想也许可能存在某种隐藏的逻辑,其中重复项没有被添加,但是一旦完成,一些重复项就会被添加到列表中。

有人能指出所有流程都没有被添加到列表中的原因吗?

以下是代码:

   Dim intProcessesCount As Integer = Process.GetProcesses.Count

   Dim localAll As Process() = Process.GetProcesses()

    Try

        For Each OneProcess As Process In localAll

            ' Extract the program's icon
            Dim ico As Icon = Icon.ExtractAssociatedIcon(OneProcess.MainModule.FileName)
            Dim pID = OneProcess.Id.ToString

            imgID = pID

            ImageList1.Images.Add(pID, ico)

            Dim row As String() = New String() { _
                OneProcess.ProcessName, _
                OneProcess.MainModule.FileVersionInfo.FileName}

            DataGridView1.Rows.Add(row)

        Next

    Catch ex As Exception
        Debug.Print("Error: " & ex.Message)
    End Try

    ttslStats.Text = "Total Processes: " & DataGridView1.Rows.Count

1 个答案:

答案 0 :(得分:0)

您在输出窗口中看到的异常会导致for循环中断,因为try/catch会封闭整个for循环。因此,您只能获得localAll 之前出现导致异常的流程。

如果你在循环中移动try/catch,它会继续通过localAll,所以你应该得到原始数字减去例外数量:

    For Each OneProcess As Process In localAll

      Try
        ' Extract the program's icon
        Dim ico As Icon = Icon.ExtractAssociatedIcon(OneProcess.MainModule.FileName)
        Dim pID = OneProcess.Id.ToString

        imgID = pID

        ImageList1.Images.Add(pID, ico)

        Dim row As String() = New String() { _
            OneProcess.ProcessName, _
            OneProcess.MainModule.FileVersionInfo.FileName}

        DataGridView1.Rows.Add(row)

     Catch ex As Exception
       Debug.Print("Error: " & ex.Message)
     End Try
    Next

此外,每次调用GetProcesses()时,您都会获得一个新的进程列表,因此如果启动了任何新进程或某些现有进程已退出,则第二个调用可能会返回不同数量的进程。两个电话。

您应该拨打GetProcesses()一次,立即将结果分配给localAll,然后使用它来计算:

Dim localAll As Process() = Process.GetProcesses()

Dim intProcessesCount As Integer = localAll.Count