Проблемы с производительностью WIA - PullRequest
1 голос
/ 20 марта 2011

Я использую 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 срабатывает целую вечность, и я ожидал, что событие сработает, как только будет создана новая фотография.

...