2014-01-31 5 views
1

Как вызвать цикл for в VB.Net?Вызов для циклов VB.Net

Пример:

For Each listViewItem As ListViewItem In Me.TaskListView.Items 
     Me.ExecuteTask(listViewItem, False) 
    Next 

Так что нужно ссылаться, но как я могу идти об этом? Я не знаю, как это сделать. Это внутри моего обработчика рабочего стола и вызывает InvalidOperationException, когда внутри него. Дополнительная информация для ошибки: «Неверная операция поперечного потока: Control« TaskListView »доступен из потока, отличного от потока, в котором он был создан.»

Ошибка происходит на этой линии:

For Each listViewItem As ListViewItem In Me.TaskListView.Items 
+0

InvalidOperationException? Вы изменяете 'listViewItem' внутри' ExecuteTask'? –

+0

Да, я. Помня об этом, он работает не в фоновом режиме. EDIT: он также показывает ошибку в первой строке (строка «для каждой»). – user2932566

+0

Проводка трассировки назад и точная линия, где она не работает, могут помочь. Обычно при изменении итерации во время итерации происходит сбой. –

ответ

1

Я преодолеть проблемы, связанные с потоками в WinForms, используя следующую подпрограмму

Public Sub GuiAsync(ByVal frm As Form, ByVal action As Action) 
    If action IsNot Nothing Then 
     If frm.InvokeRequired Then 
      frm.Invoke(action) 
     Else 
      action() 
     End If 
    End If 
End Sub 

Я хотел бы использовать его следующим образом (в случае, если ваш код работает в a Форма и Me относятся к форме):

GuiAsync(Me, 
    Sub() 
     For Each listViewItem As ListViewItem In Me.TaskListView.Items 
      Me.ExecuteTask(listViewItem, False) 
     Next 
    End Sub) 
+0

Работал безупречно, спасибо. – user2932566

+0

Рад, что это помогло)) – Rustam

Смежные вопросы