Многопоточность ListBox - PullRequest
       1

Многопоточность ListBox

0 голосов
/ 16 сентября 2018

У меня есть проблема, которую я пытаюсь решить.
У меня есть приложение, которое читает папку с файлом .mp3.
Я хочу заполнить ListView обоими именами файлови продолжительности использования многопоточность , так как это занимает слишком много времени, если я делаю это в одном потоке.

Кажется, я не могу получить это так быстро, как я стараюсь
Любая помощь будет оценена.

Public arr(2) As String
Public itm As ListViewItem
Dim T1, t2 As Thread

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    T1 = New Threading.Thread(AddressOf Me.t1worker)
    T1.Start()
    t2 = New Threading.Thread(AddressOf t2worker)
    t2.Start()
 End Sub     

Public Sub t1worker()
    For Each file As String In IO.Directory.GetFiles("f:\mvideo", "*.*")
        arr(0) = IO.Path.GetFileName(file)         
    Next
End Sub

Public Sub t2worker()
    Dim Duration As String
    Dim w As New WMPLib.WindowsMediaPlayer       
    For Each file As String In IO.Directory.GetFiles("f:\mvideo", "*.*")
        If AllowedExtension.Contains(IO.Path.GetExtension(file).ToLower)  
            Dim m As WMPLib.IWMPMedia = w.newMedia(file)
            Duration = m.durationString
            arr(1) = Duration
        End If

        arr(1) = Duration
        itm = New ListViewItem(arr)
        trackinfo.Items.Add(itm)
    Next
End Sub

1 Ответ

0 голосов
/ 16 сентября 2018

Забудь о нитях и попробуй это только для улыбок Я предполагаю, что ваш список называется trackinfo. Комментарии и пояснения в строке.

Private Sub FillListView()
    'Using a List(Of T) because the number of items is indeterminate.
    Dim lstMP3 As New List(Of ListViewItem)
    For Each file As String In IO.Directory.GetFiles("f:\mvideo", "*.*")
        Dim liMP3 As New ListViewItem
        liMP3.Text = IO.Path.GetFileName(file)
        'You probably need to send the full path to the function
        liMP3.SubItems.Add(GetDuration("Path & fileName"))
        lstMP3.Add(liMP3)
    Next
    'The .BeginUpdat /.EndUpdate prevents the listview from repainting of each
    'line addition greatly speeding up the process
    trackinfo.BeginUpdate
    trackinfo.Items.AddRange(lstMP3.ToArray)
    trackinfor.EndUpdate
End Sub
Private Function GetDuration(fileName As String) As String
    'Not at all sure how this works so you may have to adjust
    If AllowedExtension.Contains(IO.Path.GetExtension(fileName).ToLower) Then
        Dim m As WMPLib.IWMPMedia = w.newMedia(fileName)
        Duration = m.durationString
    End If
    Return Duration
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...