Обновление item в listbox в отдельном потоке - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Есть листбокс с множеством итемов с текстом допустим "текст какойто". Как при нажатии на кнопку во всех итемов был изменен текст, но без зависания проги.

Но,ошибка в ListBox1.Items(i) = items(i) :

Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'ListBox1' не из того потока, в котором он был создан.

Решение задачи: «Обновление item в listbox в отдельном потоке»

textual
Листинг программы
Public Class Form1
    Dim thead1 As System.Threading.Thread
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        thead1 = New System.Threading.Thread(AddressOf process_thead1)
        thead1.Start()
    End Sub
 
    Private Sub process_thead1()
        Dim items(ListBox1.Items.Count - 1) As String
        For i As Integer = 0 To ListBox1.Items.Count - 1
            items(i) = ListBox1.Items(i)
            items(i) = "другой текст"
            InvokeMethod(i, items(i))
            'ListBox1.Items(i) = items(i)
        Next
    End Sub
 
    Private Sub InvokeMethod(ByVal i As Integer, ByVal Item As String)
        If ListBox1.InvokeRequired Then
 
            ListBox1.BeginInvoke(New MethodInvoker(Sub() ListBox1.Items(i) = Item))
        Else
            ListBox1.Items(i) = Item
        End If
    End Sub
 
End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы