У меня есть функция, которую я хочу использовать в качестве обработчика события:
void singleFrameEventHandler(void) {
SetEvent(g_hSingleFrameArrived);
}
Однако, когда я пытаюсь зарегистрироваться для события:
iaframe->OnNewFrame += gcnew newFrame(&singleFrameEventHandler);
Следующее исключениеповышено:
Произошло необработанное исключение типа 'System.NotSupportedException' в mscorlib.dll
Дополнительная информация: Сериализация глобальных методов (включая неявную сериализацию с использованием асинхронных делегатов)не поддерживается.
Есть ли способ обойти это?
Редактировать:
Я изменил код, поэтому теперь обработчик событийметод в классе.Однако теперь я получаю другое исключение:
Необработанное исключение типа 'System.Runtime.Serialization.SerializationException' произошло в mscorlib.dll
Дополнительная информация: Невозможно найти сборку'BeamGage_Interface, версия = 1.0.3882.24450, культура = нейтральная, PublicKeyToken = null'.
Если это уместно, определение класса выглядит следующим образом:
[System::Serializable]
ref class FrameEventClass {
public:
FrameEventClass(const char *newId, IAFrame ^ frame) : id(newId) {
frame->OnNewFrame += gcnew newFrame(this, &FrameEventClass::frameEventHandler);
}
private:
const char *id;
void frameEventHandler(void) {
//Signal that the frame has arrived
SetEvent(g_hSingleFrameArrived);
//unregister for event
IAFrame ^ frame = /* Code to get handle to frame object */;
frame->OnNewFrame -= gcnew newFrame(this, &FrameEventClass::frameEventHandler);
return;
}
};
И воткак зарегистрироваться на мероприятие:
gcnew FrameEventClass(id, iaframe);