无法从.NET中侦听VB 6 COM对象的事件

时间:2016-03-01 20:52:05

标签: c# events com vb6 com-interop

我们一直试图理解为什么我们无法从Visual Studio C#/ .NET应用程序(现在是控制台)收听VB 6 COM对象的事件。 COM对象曾经是旧的VB 6应用程序的一部分,仍然可以正常工作。它的作用是,它基本上与一些后端设备通信,从它们接收称为“Pieces”的数据对象,一旦“Piece”到达,它就会触发一个名为“OnPiece”的事件来通知。

注册COM对象并从.NET引用它没有问题。我们可以在对象浏览器(VS)中浏览它,我们也可以使用它的属性和方法,但不能听它的事件。不确定问题是否在我们用于监听事件或COM事件本身的代码中。

以下是一些代码片段:

// instantiate the VB6 publisher class 
static ComClass comObj = new ComClass(); 

static void Main(string[] args) {
    // handle the event
    IConnectionEvents_OnPieceEventHandler PieceArraved =
       new IConnectionEvents_OnPieceEventHandler(method_OnPiece);
    comObj.OnPiece += PieceArraved;
}

//the method that matches the signature of the delegate

public static void method_OnPiece(int num1, string str1, int num2, int num3)           {
    // do something here
    Console.WriteLine("OK!"); // this output is never seen
}

请注意:“Pieces”确实到达,大约每秒一件,这在使用带定时器的循环时已经过测试,并且在尝试访问Piece数据时 - 一切正常。但是,我们不希望使用计时器作为解决方法,而是在作品到达时通过事件处理得到通知。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

好的,我们找到了答案!

问题既不在COM对象中,它与后端正确通信并引发事件,也不在代码的c#侦听部分。

问题在于我们尝试将监听器method_OnPiece的输出(作为验证测试​​)显示为控制台作为输出接口。我们刚刚在oObj.OnPiece += PieceArraved;之后插入了一个计时器,以允许控制台显示结果,但确实如此。

while (true) { Thread.Sleep(50); }

相关问题