【问题标题】:VB.Net Check Combobox.Text from background workerVB.Net 从后台工作人员检查 Combobox.Text
【发布时间】:2016-07-19 21:03:08
【问题描述】:

我在DoWork 例程中的BackgroundWorker 中运行以下代码

 Dim P As String
        Dim B As Integer

        P = "Verifying User Inputs"
        B = B + 1

        If SubjectName.Text = "" Then
            P = "No Subject Name Entered"
            InputValidate.ReportProgress(B, P)
            Threading.Thread.Sleep(250)
        Else
            B = B + 1
        End If

        If AgencyReferrer.Text = "" Or AgencyReferrer.Text = "Configure In Settings" Then
            P = "No Agency Of Referrer Selected"
            InputValidate.ReportProgress(B, P)
            Threading.Thread.Sleep(250)
        Else
            B = B + 1
        End If

SubjectNameTextboxAgencyReferrerCombobox

代码的Texbox 部分完成时没有任何问题,但Combobox 部分失败:

“System.InvalidOperationException”类型的异常发生在 System.Windows.Forms.dll 但未在用户代码中处理

附加信息:跨线程操作无效:控制 从线程以外的线程访问的“AgencyReferrer” 创建于。

我无法理解 TexboxCombobox 的区别在于仅检查文本值是什么。

有什么想法吗?

【问题讨论】:

  • 您可以将参数传递给 DoWork 方法,在这种情况下可以是这些控件的文本。
  • 我看不出有任何理由将该代码放在 BackgroundWorker 中。如果您确实使用了 BackgroundWorker,请不要访问 GUI 控件 - 您会得到不一致的结果,您正在经历这种情况。

标签: vb.net winforms combobox backgroundworker


【解决方案1】:

您无法跨线程边界访问或更新大多数控件的成员。在某些情况下,访问TextBox.Text 可能会失败,在大多数情况下它会起作用。不保证有效。

无需更改太多代码,您就可以使用Control.Invoke() 使 ComboBox 正常工作。即使 TextBox Text 属性正在工作,您也应该调用该调用。

Dim P As String
Dim B As Integer

Dim agencyReferrerText = AgencyReferrer.Invoke(New Func(Of String)(Function() AgencyReferrer.Text))

P = "Verifying User Inputs"
B = B + 1

If SubjectName.Text = "" Then
    P = "No Subject Name Entered"
    InputValidate.ReportProgress(B, P)
    Threading.Thread.Sleep(250)
Else
    B = B + 1
End If

If agencyReferrerText = "" Or agencyReferrerText = "Configure In Settings" Then
    P = "No Agency Of Referrer Selected"
    InputValidate.ReportProgress(B, P)
    Threading.Thread.Sleep(250)
Else
    B = B + 1
End If

调用这些调用可能很麻烦,因此请参阅How to change textbox.text while in backgroundworker? 了解自动化 Invoke-If-Required 模式的方法。您可以对检索属性执行类似操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-09
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多