我不知道如何解决这个问题......
我有一个主MDI格式,它从传感器读取Arduino的模拟引脚。我接受了串行通信并对其进行了分析,这一切都已经解决了。
在这个主窗体中,我想要每个模拟引脚的子窗体,标签代表模拟值。
我创建了一个班级" myVar"在值发生变化时提出事件:
Public Class myVar
Private mValue As Integer
Public Event VariableChanged(ByVal mValue As Integer)
Public Property Variable As Integer
Get
Variable = mValue
End Get
Set(ByVal value As Integer)
mValue = value
RaiseEvent VariableChanged(mValue)
End Set
End Property
结束班
在我的孩子表格上,我只是:
Public Class WasteVacuum
Public WithEvents value As New myVar
Private Sub WasteVacuum_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.MdiParent = Main
End Sub
Private Sub VariableChanged(ByVal NewValue As Integer) Handles value.VariableChanged
waste_lbl.Text = Convert.ToString(value.Variable)
waste_lbl.Refresh()
Console.WriteLine(value.Variable & " - " & waste_lbl.Text)
End Sub
结束班
我的主要表单修改了儿童表单"" value"根据串行连接的读数。 " VaraibleChanged"似乎工作得很好,但我的标签" waste_lbl"屏幕上没有更新!!!
以下是控制台中的结果(value.variable - waste_lbl.text):
0 - 0
0 - 0
0 - 0
0 - 0
0 - 0
0 - 0
0 - 0
5 - 5
38 - 38
87 - 87
130 - 130
152 - 152
163 - 163
179 - 179
190 - 190
201 - 201
212 - 212
222 - 222
233 - 233
244 - 244
255 - 255
266 - 266
271 - 271
282 - 282
288 - 288
298 - 298
309 - 309
320 - 320
331 - 331
336 - 336
342 - 342
342 - 342
看起来我的标签正确地取得了变量值,但为什么它不会在屏幕上更新?
提前致谢!!
答案 0 :(得分:0)
我弄清楚了自己......从表单到表单的跨线程操作。 从我的主窗体更改窗体变量,如下所示:
Me.BeginInvoke(Sub() A2_frm.val.Variable = A2.Variable)
解决了这个问题。