来自C#dll库的VB6中的线程安全性

时间:2018-04-10 04:31:52

标签: multithreading vb6 thread-safety

我对visual basic 6项目有点问题。在IDE中一切正常,但每次运行应用程序时,可执行文件都会崩溃。该应用程序使用回调与.Net dll进行通信。甚至代码就像回调开始时显示一样简单。 我将编译模式更改为P-Code,但问题仍然存在。 任何帮助将是欣赏。 谢谢大家

VB6代码:

  Option Explicit

  Public foo As FOOClient.foo
  Public comWrapper As FOOClient.comWrapper

  Sub Start()
      Set foo = New FOOClient.foo
      Set comWrapper = New FOOClient.comWrapper

      Set foo = comWrapper.SpiInit()
      comWrapper.Main foo, AddressOf TxFlowStateChanged, AddressOf PairingFlowStateChanged
      foo.Start

      PrintStatusAndActions
  End Sub

  Private Sub TxFlowStateChanged(ByVal e As FOOClient.TransactionFlowState)
      frmActions.Show

      PrintFlowInfo e

      PrintStatusAndActions
  End Sub

  Private Sub PairingFlowStateChanged(ByVal e As FOOClient.PairingFlowState)
      frmActions.Show

      frmActions.listFlow.Clear
      frmActions.lblFlowMessage.Caption = e.Message

      If e.ConfirmationCode <> "" Then
          frmActions.listFlow.AddItem "# Confirmation Code: " + e.ConfirmationCode
      End If

      PrintStatusAndActions
  End Sub

1 个答案:

答案 0 :(得分:0)

您的C#库可以使用线程,但它必须永远不会在任何线程上回调到基于VB6的EXE,而是VB6启动的主GUI线程。您可以使用Control.Invoke和Control.BeginInvoke(以及其他方法)将回调分派回VB6。 (可以在库中为此目的创建一个Control实例,只需确保它是在基于VB6的EXE的第一个调用线程上创建的。)