【问题标题】:Invoking For Loops VB.Net调用 For 循环 VB.Net
【发布时间】:2014-01-31 18:25:07
【问题描述】:

如何在 VB.Net 中调用 for 循环?

例子:

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

所以需要调用它,但我该怎么做呢?我不确定如何。这是在我的后台工作程序处理程序中,并且在其中时会导致 InvalidOperationException。该错误的额外信息是:“跨线程操作无效:控件'TaskListView'从创建它的线程以外的线程访问。”

错误发生在这一行:

    For Each listViewItem As ListViewItem In Me.TaskListView.Items

【问题讨论】:

  • InvalidOperationException?你是在修改ExecuteTask里面的listViewItem吗?
  • 是的,我是。请记住,当不在后台工作人员内部时它可以工作。编辑:它还在第一行(“for each”)行显示错误。
  • 发布回溯以及失败的确切行会有所帮助。通常,当您在迭代期间修改可迭代对象时会失败。
  • 我编辑了我之前的评论,说明它失败的地方,(在第一行),但我怎样才能获得回溯?
  • 只是额外的,它不仅说 InvalidOperationException,而且这是额外的位:“跨线程操作无效:控件'TaskListView'从创建它的线程以外的线程访问。 "

标签: vb.net multithreading winforms loops


【解决方案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

我会按如下方式使用它(如果您的代码在表单中运行并且我是对表单的引用):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    相关资源
    最近更新 更多