Извините за длинное название, я даже не знаю, как выразить вопрос
Я использую библиотеку, которая запускает обратный вызов из контекста, отличного от основного потока (это библиотека C), я создала обратный вызов в C #, и когда меня вызывают, я бы просто хотел вызвать событие.
Однако, поскольку я не знаю, что будет внутри события, я хотел бы найти способ вызвать метод без проблем блокировок и т. Д. (В противном случае сторонний пользователь должен будет обработать это внутри события очень некрасиво)
Есть ли способ сделать это?
Я могу быть совершенно не прав, но я думаю о том, как winforms обрабатывают разные потоки (вещь .Invoke)
В противном случае я могу отправить сообщение в цикл сообщений окна, но я мало что знаю о передаче сообщений и могу ли я отправлять "пользовательские" сообщения, подобные этому
Пример:
private uint lgLcdOnConfigureCB(int connection, System.IntPtr pContext)
{
OnConfigure(EventArgs.Empty);
return 0U;
}
этот обратный вызов вызывается из другой программы, которой я не могу управлять, я хотел бы запустить метод OnConfigure в основном потоке (который обрабатывает мою winform), как это сделать?
Или, другими словами, я хотел бы запустить OnConfigure без необходимости думать о блокировках
Редактировать 1:
У меня проблема с этим исключением:
CallbackOnCollectedDelegate Retrived
Сообщение: обратный вызов запущен для делегата 'G19dotNet! G19dotNet.LgLcd + lgLcdOnSoftButtonsCB :: Invoke', собранного в GarbageCollector. Во время неуправляемого кода необходимо гарантировать, что делегаты никогда не будут удалены, пока вы не уверены, что они никогда не будут вызваны
Редактировать 2:
Проблема решена мной, благодаря Stackoverflow, который всегда помогает мне!
Для дальнейшего использования: Определение делегата в качестве указателя на функцию