Этот шаблон дизайна очень интересный, я изучаю его, мне очень нравятся индикаторы выполнения.
ите за длинное название, я даже не знаю, как выразить вопрос
Я использую библиотеку, которая запускает обратный вызов из контекста, отличного от основного потока (это библиотека 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, который всегда помогает мне! Для дальнейшего использования:Определение делегата в качестве указателя на функцию