以编程方式取消订阅活动

mnr*_*123 5 c# vb6 com-interop

我有一个使用COM对象的vb6应用程序(COM暴露的C#对象).vb6应用程序正在订阅COM(C#)对象发布的事件.

我的问题是我不知道如何以编程方式取消订阅该事件.我知道如何取消编写的唯一方法是首先不订阅(即在vb6代码中注释掉事件处理程序).

有没有办法在运行时(以编程方式)取消订阅?也许通过识别与vb6事件处理程序对应的委托并且不调用它来在C#端做某事?

提前致谢.

Dea*_*nna 2

您可以通过保留两个对象引用变量来停止接收 VB6 中的事件,一个带有关键字WithEvents,一个不带有关键字。当您想要订阅时,请将第一个设置为与第二个相同的对象,要取消订阅,请将第一个设置为Nothing。当您想要释放对象时,您需要确保同时释放/替换它们。

Dim MyObject As MyClass
Dim WithEvents MyObjectEvents As MyClass

Public Sub MyObjectEvents_EventName()
  MsgBox "Received event"
End Sub

Private Sub Subscribe()
  Set MyObjectEvents = MyObject
End Sub

Private Sub Unsubscribe()
  Set MyObjectEvents = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)