0

我在使用 WIA 扫描时遇到问题。

public List<Image> Scan(string scannerId)
    {
        var images = new List<Image>();

        var hasMorePages = true;
        while (hasMorePages)
        {
            // select the correct scanner using the provided scannerId parameter
            var manager = new DeviceManager();
            Device device = null;
            foreach (DeviceInfo info in manager.DeviceInfos)
            {
                if (info.DeviceID == scannerId)
                {
                    // connect to scanner
                    device = info.Connect();
                    break;
                }
            }

            // device was not found
            if (device == null)
            {
                // enumerate available devices
                string availableDevices = "";
                foreach (DeviceInfo info in manager.DeviceInfos)
                {
                    availableDevices += info.DeviceID + "n";
                }

                // show error with available devices
                throw new Exception("The device with provided ID could not be found. Available Devices:n" +
                                    availableDevices);
            }

            Item item = device.Items[1];

            try
            {
                // scan image
                ICommonDialog wiaCommonDialog = new CommonDialog();
                var image = (ImageFile) wiaCommonDialog.ShowTransfer(item, WiaFormatBmp, true); // <--- exception goes from there

                // save to temp file
                string fileName = "test.bmp";//Path.GetTempFileName();
                File.Delete(fileName);
                image.SaveFile(fileName);
                image = null;

                // add file to output list
                images.Add(Image.FromFile(fileName));
            }
            catch (Exception exc)
            {
                throw exc;
            }
            finally
            {
                item = null;

                //determine if there are any more pages waiting
                Property documentHandlingSelect = null;
                Property documentHandlingStatus = null;

                foreach (Property prop in device.Properties)
                {
                    if (prop.PropertyID == WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_SELECT)
                        documentHandlingSelect = prop;

                    if (prop.PropertyID == WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_STATUS)
                        documentHandlingStatus = prop;
                }

                // assume there are no more pages
                hasMorePages = false;

                // may not exist on flatbed scanner but required for feeder
                if (documentHandlingSelect != null)
                {
                    // check for document feeder
                    if ((Convert.ToUInt32(documentHandlingSelect.get_Value()) && WIA_DPS_DOCUMENT_HANDLING_SELECT.FEEDER) != 0)
                    {
                        hasMorePages = ((Convert.ToUInt32(documentHandlingStatus.get_Value()) &&
                                         WIA_DPS_DOCUMENT_HANDLING_STATUS.FEED_READY) != 0);
                    }
                }
            }
        }

        return images;
    }

扫描完成后出现异常:“动态操作只能在同构 AppDomain 中执行。”。有人可以解释一下我做错了什么吗?我试图在另一个线程中使用它,但仍然得到相同的异常。

扫描仪:DSmobile 700D。

4

0 回答 0