1

我在 WPF 应用程序中使用WIA 2.0在拍摄照片时从相机中获取图像(使用 wiaEventItemCreated 事件)。

除了我似乎找不到解决方法的性能问题外,这很好用。我的应用程序存储客户的照片,您可以浏览客户,并更改您正在查看的客户。当相机拍照时,照片将针对选定的客户进行存储。当我在选择客户 A 的情况下快速连续拍摄 10 次,然后选择客户 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);
    }

}

因此代码尝试获取当前选择的客户和稍后要处理的 itemId。队列在 BackgroundWorker 中处理并执行 .Transfer() 和 .SaveAs()。虽然我看到的是 DeviceEventHandler 需要很长时间才能触发,但我原以为一旦创建新照片就会触发该事件。

4

0 回答 0