如何实时更新具有 运行 个进程的列表框?

How do you update a ListBox with running processes in real-time?

在 Windows 中,任务管理器 会自动更新您 Laptop/Desktop 上的所有 运行 进程。然而,不是我的观点。

我的问题是,有没有一种方法可以使用所有新进程实时更新列表框(由于我的实例,最好使用 Timer1.Tick)(每隔设定的时间间隔更新新进程) ?

我的 ListBox1 充满了当前 运行 个进程。

我试过的东西

  1. 在我的子“Timer1_Tick”中,我尝试使用 ListBox1.Refresh() 代码,但是,我意识到,所做的只是刷新 ListBox, 不是 运行 进程。

  2. 正在研究类似问题

获取运行进程的代码

Private Sub Mainframe_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim procs() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses
        Dim f As String

        For Each proc As System.Diagnostics.Process In procs
            f = GetProcessFileName(proc)
            If f.Length > 0 Then
                ListBox1.Items.Add(f)
                ListBox1.Items.Add("MD5: " & GetMD5String(f)) <-- Not relevant
                ListBox1.Items.Add(String.Empty)
            End If

        Next

    End Sub

我的Timer1代码

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Timer1.Enabled = False 'Stops the timer
    ListBox1.Update()
    ListBox1.Refresh()
    Timer1.Enabled = True
End Sub

从我的头顶来看:它应该是这样的。

免责声明:我说话不太好VB ;-)

PS:可能你得到一个 "not on the same thread invoke exception"

Private Sub Mainframe_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'call it initially
    RefreshList()
End Sub

'this sub actually does the lisbox update
Private Sub RefreshList()
    Dim procs() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses
    Dim f As String

    'as from @Visual Vincent's comment:
    ListBox1.BeginUpdate()
    ListBox.Items.Clear()

    For Each proc As System.Diagnostics.Process In procs
        f = GetProcessFileName(proc)
        If f.Length > 0 Then
            ListBox1.Items.Add(f)
            ListBox1.Items.Add("MD5: " & GetMD5String(f)) <-- Not relevant
            ListBox1.Items.Add(String.Empty)
        End If

    Next

    ListBox1.EndUpdate()

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Timer1.Enabled = False 'Stops the timer
    RefreshList()
    Timer1.Enabled = True
End Sub