【问题标题】:Invoke method for multi thread application?多线程应用程序的调用方法?
【发布时间】:2016-03-04 04:24:47
【问题描述】:

我的应用程序中有一个与here 相同的错误,此人遇到了同样的问题。我的应用程序是多线程的,其中工作线程正在更新 UI 上的 Waveformgraph。我相信这就是我的问题所在,以及为什么在运行应用程序时,我会定期在至少一个波形图对象中得到一个大的红色 X。从阅读和研究中,我需要使用 Invoke 或 BeginInvoke 方法吗?有人可以更好地解释并提供与我的代码相关的示例代码吗?到目前为止,我发现的样本仍然让我不知道我需要如何做这件事或我需要做什么。感谢您的帮助。

此代码在主线程的 swScopeOnOff 点击事件上。

  thread2 = New System.Threading.Thread(AddressOf dataAcquiring)
  thread2.Start()

这段代码在dataAcquiring Sub中

  Public Sub dataAcquiring()
    'While Scope switch is on, stream each Ai channel's data continuously to its respective WaveForm graph
    Do While swScopeOnOff.Value = True
            data = reader.ReadWaveform(readRate)
            i = 0
            For Each WaveformGraph In WFGS
                WaveformGraph.PlotWaveformAppend(data(i)) 'This line is updating the UI's waveform graphs
                i += 1
            Next
            i = 0
    Loop
End Sub

【问题讨论】:

    标签: vb.net multithreading invoke begininvoke measurement-studio


    【解决方案1】:

    正确的、线程安全的调用实际上并不像人们想象的那么难(甚至对于线程安全事件也没有,但这与这个问题无关)。

    我建议您使用普通的Invoke 方法,例如Me.Invoke()(其中Me 是当前形式,如果不是,请使用Form1 或其他名称)。使用BeginInvoke() 可能是异步的,但它会堆积内存使用量,如果没有正确调用EndInvoke(),可能会导致内存泄漏。

    如果您的目标是 .NET 4.0 或更高版本,您可以这样做:

    Me.Invoke(Sub() WaveformGraph.PlotWaveformAppend(data(i)))
    

    但是,如果您的目标是 .NET 3.5 或更低版本,则需要多几行代码。

    'Outside your Sub.
    Delegate Sub WaveformAppendDelegate(ByRef WaveformGraph, ByRef data)
    
    'Create a new sub.
    Public Sub AppendData(ByRef WaveformGraph, ByRef data)
        WaveformGraph.PlotWaveformAppend(data)
    End Sub
    
    'Inside your sub, when you're going to invoke.
    Me.Invoke(New WaveformAppendDelegate(AddressOf AppendData), WaveformGraph, data(i))
    

    【讨论】:

    • 我的目标是 .NET 4.0,所以这很简单。非常感谢您提供代码和“操作方法”以及每个的解释。
    • @busarider29 :不客气。在我看来,.NET 4.0 是最好的更新之一。
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多