Vb.net 从另一个模块中的线程访问模块范围内的数组会导致错误:';对象引用未设置为对象的实例;
当一个模块中的线程访问第二个模块中的表单数组时,数组引用现在为“nothing”,并因错误而崩溃:“对象引用未设置为对象的实例。” 这是带有数组的表单模板Vb.net 从另一个模块中的线程访问模块范围内的数组会导致错误:';对象引用未设置为对象的实例;,vb.net,Vb.net,当一个模块中的线程访问第二个模块中的表单数组时,数组引用现在为“nothing”,并因错误而崩溃:“对象引用未设置为对象的实例。” 这是带有数组的表单模板 Public Class Antenna_Window_Template ''''''''''''''''''''''''''' CONSTANTS ''''''''''''''''''''''''''''''' public const MAX_ANTENNAS = 8 '''''''''''''''''''
Public Class Antenna_Window_Template
''''''''''''''''''''''''''' CONSTANTS '''''''''''''''''''''''''''''''
public const MAX_ANTENNAS = 8
''''''''''''''''''''''''''' VARIABLES '''''''''''''''''''''''''''''''
public antenna_graph_Windows( MAX_ANTENNAS ) as Antenna_Window_Template
''''''''''''''''''''''''''' C O D E '''''''''''''''''''''''''''''''
End Class
这里是数组初始化
Public Class Main_Window
Private Sub Main_Window_Load(sender As Object, e As EventArgs) Handles MyBase.Load
for antenna = 1 to MAX_ANTENNAS
' antenna_graph_Windows.add( new Antenna_Window_Template )
with Antenna_Window_Template
.antenna_graph_Windows( antenna ) = new Antenna_Window_Template
.antenna_graph_Windows( antenna ).text &= antenna
.antenna_graph_Windows( antenna ).show
end with
Next
End Sub
Private Sub Button_start_capture_Click(sender As Object, e As EventArgs) Handles Button_start_capture.Click
aa = Antenna_Window_Template.antenna_graph_Windows ' <<< ARRAY OK
if CheckBox_simulate_embedded.Checked
Embedded_Simulation.start_capture_session()
aa = Antenna_Window_Template.antenna_graph_Windows' <<< ARRAY OK
return
End If
Embedded_Serial_Interface.start_capture_session()
End Sub
公共类主窗口
私有子主窗口加载(发送方作为对象,e作为事件参数)处理MyBase.Load
对于天线=1至最大天线
'天线\图形\窗口。添加(新天线\窗口\模板)
带天线\u窗口\u模板
.天线图窗口(天线)=新天线窗口模板
.天线\图形\窗口(天线).文本&=天线
.天线\图形\窗口(天线)。显示
以
下一个
端接头
私有子按钮\u开始\u捕获\u单击(发件人作为对象,e作为事件参数)处理按钮\u开始\u捕获。单击
aa=天线\窗口\模板。天线\图形\窗口'使用其他类代替模块。也许这就是它应该看起来的样子
Public Class Antenna_Window_Template
''''''''''''''''''''''''''' CONSTANTS '''''''''''''''''''''''''''''''
Public Shared ReadOnly MAX_ANTENNAS As Integer = 8
''''''''''''''''''''''''''' VARIABLES '''''''''''''''''''''''''''''''
Public antenna_graph_Windows As List(Of Antenna_Window_Template)
Public Shared isInited As Boolean = False
''''''''''''''''''''''''''' C O D E '''''''''''''''''''''''''''''''
Public Sub New()
If Not isInited Then
isInited = True
Me.antenna_graph_Windows = New List(Of Antenna_Window_Template)
For idx As Integer = 1 To MAX_ANTENNAS
antenna_graph_Windows.Add(New Antenna_Window_Template)
Next
isInited = False
End If
End Sub
Public Iterator Function AllAGW() As IEnumerable(Of Antenna_Window_Template)
For Each agw As Antenna_Window_Template In Me.antenna_graph_Windows
Yield agw
Next
End Function
''''''''''''''''''''''''''' O T H E R C O D E '''''''''''''''''''''''''''''''
End Class
Public Class Embedded_Simulation
Private embedded_communication_thread As Task
Private aa As Antenna_Window_Template
Public Sub New(some_Antenna_Window_Template As Antenna_Window_Template)
Me.aa = some_Antenna_Window_Template
End Sub
Public Sub start_capture_session()
' Start communication thread:
embedded_communication_thread = Task.Run(Sub()
Me.run_embedded_communication()
End Sub)
End Sub
Private Sub run_embedded_communication()
Do
' Simulate sample from embedded
' simulate_sample(simulation_value_I, simulation_value_Q)
' Update graph of each antenna window:
For Each AWT As Antenna_Window_Template In Me.aa.AllAGW
'AWT.Chart_antenna_window.Series("sample_point_I").Points.AddY(simulation_value_I) ' <<<<<<<<<<<<<<<<<< CRASHES: : 'Object reference not set to an instance of an object.'
'AWT.Chart_antenna_window.Series("sample_point_Q").Points.AddY(simulation_value_Q)
Next
Thread.Sleep(500) 'simulate delay
Loop
' End thread:
End Sub
End Class
只是根据有限的信息猜测而已
如图所示,模块具有特定用途,但这似乎不符合这些用途
Public Class Antenna_Window_Template
''''''''''''''''''''''''''' CONSTANTS '''''''''''''''''''''''''''''''
Public Shared ReadOnly MAX_ANTENNAS As Integer = 8
''''''''''''''''''''''''''' VARIABLES '''''''''''''''''''''''''''''''
Public antenna_graph_Windows As List(Of Antenna_Window_Template)
Public Shared isInited As Boolean = False
''''''''''''''''''''''''''' C O D E '''''''''''''''''''''''''''''''
Public Sub New()
If Not isInited Then
isInited = True
Me.antenna_graph_Windows = New List(Of Antenna_Window_Template)
For idx As Integer = 1 To MAX_ANTENNAS
antenna_graph_Windows.Add(New Antenna_Window_Template)
Next
isInited = False
End If
End Sub
Public Iterator Function AllAGW() As IEnumerable(Of Antenna_Window_Template)
For Each agw As Antenna_Window_Template In Me.antenna_graph_Windows
Yield agw
Next
End Function
''''''''''''''''''''''''''' O T H E R C O D E '''''''''''''''''''''''''''''''
End Class
Public Class Embedded_Simulation
Private embedded_communication_thread As Task
Private aa As Antenna_Window_Template
Public Sub New(some_Antenna_Window_Template As Antenna_Window_Template)
Me.aa = some_Antenna_Window_Template
End Sub
Public Sub start_capture_session()
' Start communication thread:
embedded_communication_thread = Task.Run(Sub()
Me.run_embedded_communication()
End Sub)
End Sub
Private Sub run_embedded_communication()
Do
' Simulate sample from embedded
' simulate_sample(simulation_value_I, simulation_value_Q)
' Update graph of each antenna window:
For Each AWT As Antenna_Window_Template In Me.aa.AllAGW
'AWT.Chart_antenna_window.Series("sample_point_I").Points.AddY(simulation_value_I) ' <<<<<<<<<<<<<<<<<< CRASHES: : 'Object reference not set to an instance of an object.'
'AWT.Chart_antenna_window.Series("sample_point_Q").Points.AddY(simulation_value_Q)
Next
Thread.Sleep(500) 'simulate delay
Loop
' End thread:
End Sub
End Class
Dim awtData As New Antenna_Window_Template
Dim embSim As New Embedded_Simulation(awtData)
embSim.start_capture_session()