Этот шаблон дизайна очень интересный, я изучаю его, мне очень нравятся индикаторы выполнения.

ите за длинное название, я даже не знаю, как выразить вопрос

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