VB6事件已经提升但在C#处理程序中没有立即处理

时间:2012-01-26 11:58:44

标签: c# events vb6 com-interop

有没有人遇到过这种情况?我在VB6中引发了一个事件,它在一个像这样连接起来的c#库中处理。

在ctor中:

_EventHandler = new __MyObj_Event_EventHandler(_MyObj_Event);

何时需要:

_MyObj.Event += _EventHandler;
_MyObj.DoSomthingThatResultsInTheEvent;

在处理程序中:

private void _MyObj_Event()
{
    _MyObj.Event -= _EventHandler;
    //Do Something
}

在VB6中,它以通常的方式声明和引发,我使用嵌入式互操作类型来导入dll。我在RaiseEvent调用之前和之后以及事件处理程序中添加了日志记录。我期待看到序列:

BeforeRaise-> Handler-> AfterRaise

但我所看到的是在某些机器上,VB6 RaiseEvent调用似乎没有阻塞,记录的序列是:

BeforeRaise-> AfterRaise->处理程序

现在我应该只处理一个线程,如果我在问题机器上的调试中运行VB6库,问题就不会发生。

这与我有另一个活跃的问题有关VB6 event passing bool argument that's always 'true' in C#因为这个问题中描述的问题似乎只发生在这个问题中描述的问题时。

还有其他人经历过这个吗?我可以以某种方式以不同方式声明事件委托或使用GC确保它每次都是新鲜的吗?为什么它只会发生在随机的几台机器上?

0 个答案:

没有答案