【发布时间】:2021-06-20 17:31:52
【问题描述】:
我正在使用 TCP 客户端/服务器从微控制器接收信息,并在 Win Forms 应用程序 VB.NET 中使用该信息。我的问题是尝试根据 IF 语句中的数据表检查标签。我尝试了不同形式的调用,但它们似乎都不起作用。 VB代码
If lblStep.Invoke(New MethodInvoker(Sub() lblStep.Text = lblStep.Text), Nothing) = dt.Rows(0).Item("Step") Then
'Do something
end if
我收到的错误是多线程错误。
【问题讨论】:
-
使用表单作为编组器,并在尝试读取其属性之前检查是否创建了所需的控件句柄。这应该设置什么:
lblStep.Text = lblStep.Text?请注意,If条件需要在方法内部而不是外部进行测试。 -
您是否尝试评估控件的文本是否包含 something 并根据测试结果设置单元格的值?测试一个Control的文本是否和一个Cell的内容一样,然后做something else? -- 如果你还没有设置
Option Strict On。 -
@Jimi 我正在尝试评估标签的文本是否等于数据表单元格的值。控件的句柄是在读取其属性之前创建的。
-
该代码是荒谬的。您在 UI 线程上做的唯一一件事就是将
Text的Label分配给它自己。您似乎期望Invoke返回一个值,然后您可以将其与某些东西进行比较,但是如果Invoke调用Sub,它应该如何返回任何东西?如果您期望返回值,那么您必须调用一个返回值的方法,即Function。当然,调用一个方法来获取返回值,然后在该方法中进行比较时,有什么意义呢?
标签: vb.net multithreading if-statement label invoke