C# 无法侦听VB 6 COM对象';来自.NET的事件

C# 无法侦听VB 6 COM对象';来自.NET的事件,c#,events,com,vb6,com-interop,C#,Events,Com,Vb6,Com Interop,我们一直在试图理解为什么我们无法从VisualStudioC#/.NET应用程序(现在是控制台一个)侦听VB6COM对象的事件。COM对象曾经是旧VB6应用程序的一部分,该应用程序仍然可以正常工作。它所做的是,它基本上与一些后端设备通信,从它们那里接收称为“片段”的数据对象,一旦“片段”到达,它就会触发一个称为“OnPiece”的事件进行通知 注册COM对象并从.NET引用它时没有问题。我们可以在对象浏览器(VS)中浏览它,也可以使用它的属性和方法,但不能监听它的事件。不确定问题是在我们用来侦听

我们一直在试图理解为什么我们无法从VisualStudioC#/.NET应用程序(现在是控制台一个)侦听VB6COM对象的事件。COM对象曾经是旧VB6应用程序的一部分,该应用程序仍然可以正常工作。它所做的是,它基本上与一些后端设备通信,从它们那里接收称为“片段”的数据对象,一旦“片段”到达,它就会触发一个称为“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
}
请注意:“工件”确实到达,大约每秒一个工件,这已经在使用带计时器的循环时进行了测试,并且在尝试访问工件数据时-所有工作正常。但是,我们不希望使用计时器作为解决方法,而是希望在工件到达时通过事件处理得到通知


感谢您的帮助。

好的,我们找到了答案

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

问题在于我们试图将监听器方法的输出(作为验证测试)作为输出接口显示到控制台中。我们只是在
oObj.OnPiece+=pieceArrawed之后插入了一个计时器
允许Console显示结果,它确实显示了

while(true)
{
睡眠(50);

}

好的,我们找到了答案

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

问题在于我们试图将监听器方法的输出(作为验证测试)作为输出接口显示到控制台中。我们只是在
oObj.OnPiece+=pieceArrawed之后插入了一个计时器
允许Console显示结果,它确实显示了

while(true)
{
睡眠(50);

}

请阅读如何设置代码格式。您没有触发此处的事件,您正在收听。感谢注意,我将“触发器”更改为“侦听”。请阅读如何设置代码格式。您没有触发此处的事件,您正在收听。感谢注意,我将“触发器”更改为“侦听”