Vb.net 从另一个模块中的线程访问模块范围内的数组会导致错误:';对象引用未设置为对象的实例;

Vb.net 从另一个模块中的线程访问模块范围内的数组会导致错误:';对象引用未设置为对象的实例;,vb.net,Vb.net,当一个模块中的线程访问第二个模块中的表单数组时,数组引用现在为“nothing”,并因错误而崩溃:“对象引用未设置为对象的实例。” 这是带有数组的表单模板 Public Class Antenna_Window_Template ''''''''''''''''''''''''''' CONSTANTS ''''''''''''''''''''''''''''''' public const MAX_ANTENNAS = 8 '''''''''''''''''''

当一个模块中的线程访问第二个模块中的表单数组时,数组引用现在为“nothing”,并因错误而崩溃:“对象引用未设置为对象的实例。”

这是带有数组的表单模板

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()