VB6 Событие возникло, но не обработано немедленно в обработчике C # - PullRequest
0 голосов
/ 26 января 2012

Кто-нибудь сталкивался с такой ситуацией? У меня есть событие в 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-> Обработчик-> AfterRaise

но на некоторых машинах я вижу, что вызов VB6 RaiseEvent, похоже, не блокируется, а записываемая последовательность:

BeforeRaise-> AfterRaise-> Обработчик

Теперь я должен иметь дело только с одним потоком, и если я запускаю библиотеку VB6 в режиме отладки на проблемной машине, проблема не возникает.

Это связано с другим активным вопросом, который у меня есть Событие VB6, передающее аргумент bool, который всегда 'true' в C # Поскольку описанная в этом вопросе проблема возникает только тогда, когда возникает проблема, описанная в этом вопросе.

Кто-нибудь еще испытывал это? Могу ли я как-то объявить делегат события по-другому или использовать GC, чтобы убедиться, что он каждый раз свежий или что-то еще? Почему это происходит только на нескольких случайно выбранных машинах?

...