如何实时更新运行进程的ListBox?

时间:2018-06-15 08:51:40

标签: .net vb.net tasklist

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

我的问题是,有没有办法用所有新进程更新ListBox(最好是Timer1.Tick由于我的实例),但实时(每个设置间隔更新新进程)?

我的ListBox1已填充当前正在运行的进程。

我尝试过的事情

  1. 在我的子“Timer1_Tick”中,我尝试使用ListBox1.Refresh()代码,但是,我已经意识到,所有这一切都是刷新ListBox,< strong> 正在运行的进程。

  2. 研究类似问题

  3. 获取正在运行的进程的代码

    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
    

1 个答案:

答案 0 :(得分:1)

从头到尾:它应该是这样的。

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

PS:可能你得到一个“不在同一个线程上调用异常”

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