Я использую WIA 2.0 в приложении WPF для захвата изображений с камеры во время съемки (с использованием события wiaEventItemCreated).
Это прекрасно работает, за исключением проблемы с производительностью, которая, похоже, не может обойтись. Мое приложение хранит фотографии клиентов, и вы можете просматривать клиентов и изменять, какого клиента вы просматриваете. Когда камера делает фотографию, фотография будет сохранена для выбранного клиента. Проблема возникает, когда я делаю, скажем, 10 снимков подряд с выбранным клиентом A, затем выбираю клиента B и делаю еще 10 снимков. Кажется, что WIA ждет передачи каждой фотографии перед тем, как запустить следующее событие, так что почти ставить их в очередь, а не отправлять события непосредственно при выстреле? Я на 99% уверен, что мой код не вызывает такого поведения, и я думаю, что он, вероятно, встроен в поведение?
Кто-нибудь сталкивался и победил это? У кого-нибудь есть другие предложения, которые могут удовлетворить то, что я пытаюсь сделать? Рад опубликовать дополнительную информацию или код.
У меня нет кода под рукой, но это примерно так:
// Set up the handler
var manager = new DeviceManagerClass();
manager.RegisterEvent(...wiaEventItemCreated);
manager.OnEvent += ...(DeviceEventHandler);
// the handler, don't quote me on the order of parameters, i'm doing this from memory!
void DeviceEventHandler(string deviceId, string eventId, string itemId) {
if (eventId == ...wiaEventItemCreated) {
// Get the currently selected object
var selectedCustomer = _customerService.GetCurrentCustomer();
// Put the itemId and selectedCustomerId in a queue to be processed later
_queue.Enqueue(new ProcessFileMessage { CustomerId = selectedCustomer.Id,
ItemId = itemId);
}
}
Таким образом, код пытается получить текущего выбранного клиента и идентификатор элемента, который будет обработан позднее. Очередь обрабатывается в BackgroundWorker и выполняет .Transfer () и .SaveAs (). Однако я вижу, что DeviceEventHandler срабатывает целую вечность, и я ожидал, что событие сработает, как только будет создана новая фотография.