Я пытаюсь сделать что-то, что проверяет имена пользователей Xbox, но я попытался сделать это с помощью таймера, который отстает от него. Поэтому я решил, что я делаю это с фоновым рабочим, но с разными потоками, а ссылки на пользовательский интерфейс для меня действительно не работают. Любая помощь?Threading and Background Worker
For i As Integer = 0 To ListBox1.Items.Count
Using Wc As New WebClient()
Try
Dim Xbox As String = String.Empty
Xbox = Wc.DownloadString("http://www.xboxgamertag.com/search/" & ListBox1.SelectedItem.ToString())
If Xbox.Contains("Online Status") Then
FlatAlertBox1.Text = "Gamertag " & ListBox1.SelectedItem.ToString & " is taken :("
FlatAlertBox1.kind = FlatAlertBox._Kind.Error
FlatAlertBox1.Visible = True
End If
Catch ex As Exception
FlatAlertBox1.Text = "Gamertag " & ListBox1.SelectedItem.ToString & " is not taken!"
FlatAlertBox1.kind = FlatAlertBox._Kind.Success
FlatAlertBox1.Visible = True
End Try
End Using
Next
ListBox1.SelectedIndex += 1
Когда я пытаюсь запустить его, я получаю:
Исключение типа «System.InvalidOperationException» произошло в System.Windows.Forms.dll, но не был обработан в пользовательском коде
Дополнительная информация: Работа с перекрестными потоками недействительна: элемент управления ListBox1 доступен из потока, отличного от потока, на котором он был создан.
Если есть обработчик для этого исключения, программа может быть безопасно продолжена.
На линии: FlatAlertBox1.Text = "Gamertag " & ListBox1.SelectedItem.ToString & " is not taken!"
http://stackoverflow.com/questions/7743675/cross-thread-operation-not-valid – Plutonix
, если вы в 2012 или 2013 году можете использовать [async/await] (http://msdn.microsoft.com). /en-us/library/vstudio/hh191443(v=vs.110).aspx) выполнить асинхронную выборку и остановить ее блокировку нити ui без использования потоков. – user1937198