vb.net - 在构造函数 VB.NET 中的运行时添加处理程序
问题描述
重新编辑
根据@enigmativity 在他的评论中的建议,我重新编辑了这个问题,使其更容易理解。
这是我想在我的程序中做的一个例子。我试图让它尽可能简单,所以我希望你能理解我的问题。
问题如下:我正在尝试动态添加处理程序,因为我有一个对象需要在发生某些事情时触发处理程序,并且我可以在程序中动态创建这些对象。也许按照这个例子你可以理解我的问题。
如果我有一个对象,例如一辆汽车,它有自己的属性(门、轮子、马达……),并且在路上发生了一些事情,我希望处理程序 BREAK 触发,并在 BREAK 函数中做我需要做的任何事情让它打破。这是该对象的类的示例代码:
Public Class Car
Public Property carName As String
Public Property wheels As Integer
Public Property motor As String
Public Property color As String
Public Property speed As Decimal
Private Event BreakCar()
Public Sub New()
End Sub
Public Sub New(ByVal name_ As String, ByVal wheels_ As Integer, motor As String, color As String, ByVal speed As Decimal)
carName = name_
wheels = wheels_
motor = motor_
color = color_
speed = speed_
End Sub
Public Sub Break()
Try
AddHandler BreakCar, AddressOf EmergencyBreak
RaiseEvent AutoMsg()
Catch ex As Exception
MsgBox("Error: " & ex.Message & ". Stacktrace: " & ex.StackTrace)
End Try
End Sub
Private Sub EmergencyBreak()
Try
MsgBox("Emergency Break")
Catch ex As Exception
MsgBox("Error: " & ex.Message & ". Stacktrace: " & ex.StackTrace)
End Try
End Sub
End Class
另外,在主要形式中,我有这样的东西:
Public Class frmMain
...
Private Sub AddMe(ByVal name_ As String, ByVal wheels_ As Integer, ByVal motor_ As String, ByVal color_ As String, ByVal speed_ As Decimal, Byval initCoordinates_ as PointLatLng)
Try
unitsList.Add(New Car(name_, wheels_, motor_, color_, speed_))
Dim marker As GMapMarker
marker = New GMarkerGoogle(initCoordinates_, GMarkerGoogleType.orange_dot)
marker.ToolTipMode = MarkerTooltipMode.Always
marker.ToolTipText = name_
meOverlay.Markers.Add(marker)
Dim lvItem As ListViewItem
lvItem = lvUnits.Items.Add(name_)
lvItem.SubItems.Add(Math.Round(initCoordinates_.Lat, 4))
lvItem.SubItems.Add(Math.Round(initCoordinates_.Lng, 4))
Dim unit_ As Car = unitsList.FirstOrDefault(Function(x) x.carName = name_)
unit_.Break()
Dim tTemp_ As Thread = New Thread(Sub() CarMovement(unit_))
tTemp_.Name = name_
tTemp_.Priority = ThreadPriority.Normal
tTemp_.Start()
unitsThreadList.Add(tTemp_)
Catch ex As Exception
MsgBox("Error: " & ex.Message & ". Stacktrace: " & ex.StackTrace)
End Try
End Sub
...
End Class
有了这个,我试图在系统中添加汽车,使用不同的线程,在将汽车添加到系统后,启动它的处理程序以使其在某些情况发生时中断。
我的问题是处理程序从不触发,我不知道原因,因为当汽车 X 发生某些事情时,处理程序 Break() 必须触发但它没有触发。
难道我做错了什么?也许不可能为每个像这样动态创建的对象添加处理程序?
谢谢你的帮助!
解决方案
推荐阅读
- java - 在 null 问题上找不到属性或字段
- python - 如何根据先前的键值打印字典的值?(其中关键是日期)
- javascript - 当角度选择下拉事件完成时进行计算
- ios - 使用一个 CBManager 连接和写入多个外围设备
- javascript - react js中的日期转换
- sql - 按时间范围谷歌选择不同的用户组 - bigquery SQL
- android - 当应用程序关闭时我需要一个屏幕提醒像这样的示例屏幕图像
- java - 如何在一个 JText 区域中显示大量价值 JTable 选定的行
- scikit-learn - 使用 scikit-learn LinearRegression.predict() 遇到维度问题
- css - 我们可以将 Mat-card 与 Anchor Tag 一起使用吗?