Я пишу приложение на C #, которое вызывает C ++ dll. Эта DLL является драйвером устройства для системы обработки изображений; при получении изображения предварительный просмотр изображения доступен из библиотеки построчно. DLL C ++ принимает обратный вызов, чтобы заполнить предварительный просмотр, и этот обратный вызов состоит в основном из размера конечного изображения, отсканированной в данный момент строки и самой строки данных.
Проблема в том, что время остановки сканирования и обратного вызова C # перестает получать информацию. Ход программы идет примерно так:
- Назначение обратного вызова для C ++ dll из C #
- Пользователь начинает получать данные
- Устройство запускается
- DLL начинает вызывать обратный вызов через несколько секунд (в норме)
- Устройство завершает формирование изображения
- DLL все еще вызывает обратный вызов для удвоения времени формирования изображения.
Эта же DLL прекрасно работала с приложением C ++; похоже, что задержка последнего шага отсутствует. Однако в C #, если мне нужно немедленно вернуться, обратная связь все еще существует; независимо от того, что я делаю внутри обратного вызова, он есть.
Является ли эта задержка внутренним ограничением вызова управляемого кода из неуправляемого кода, или есть что-то, что любая из сторон могла бы сделать, чтобы это ускорилось? Я нахожусь в контакте с разработчиком библиотеки C ++, поэтому можно реализовать исправление со стороны C ++.
Редактировать: Может ли сделать что-то простое, как работа с именованным каналом? Может ли приложение читать из своего канала?