Search code examples
c#c#-4.0c#-3.0scanningwia

How to scan all pages with one click as below:


I have the code below for scanning all papers. It works but the problem is when all papers will finish, it shows the error:

Exception User-Unhandeled System.runtime.InterpService.COMEException: Exception From HRESULT:0*80210003

which belongs to this line:

var imgFile = (ImageFile)ScanerItem.Transfer();

How can i fix it? Here is the code:

        public async void button1_Click(object sender, EventArgs e)
        {

                try
                {

                    object[] items = await Task.Run<object[]>(() =>
                    {

                        var deviceManager = new DeviceManager();
                        List<object> result = new List<object>();


                        for (int i = 1; i <= deviceManager.DeviceInfos.Count; i++) // Loop Through the get List Of Devices.
                        {
                            if (deviceManager.DeviceInfos[i].Type != WiaDeviceType.ScannerDeviceType) // Skip device If it is not a scanner
                            {
                                continue;
                            }
                            //new
                            result.Add(deviceManager.DeviceInfos[i].Properties["Name"].get_Value());
                        }
                        return result.ToArray();


                    });

                    foreach (var item in items)
                    {
                        lstListOfScanner.Items.Add(item);
                    }

            }
                catch (COMException ex)
                {
                    MessageBox.Show(ex.Message);
                }    
bool continueScanning2 = true;
    try
    {
        await Task.Run(() =>
        {
            var deviceManager = new DeviceManager();
            DeviceInfo AvailableScanner = null;
            while (continueScanning2)
            {

                string name2 = Guid.NewGuid().ToString().Replace("-", "") + ".jpg";
                var Path = @"C:\Users\...\Desktop\test\" + name2; // save the image in some path with filename.
                pictureBox1.ImageLocation = Path;
                bitmap.Save(Path, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        });
    }
    catch (COMException ex)
    {
        MessageBox.Show(ex.Message);
    }

Solution

  • The description for the error code provided on this microsoft page says

    WIA_ERROR_PAPER_EMPTY

    There are no documents in the document feeder.

    And you confirmed that the error is shown when all papers are scanned.

    In the catch block you can check the error code and handle the case with the WIA_ERROR_PAPER_EMPTY error encountered in a way you find appropriate:

    catch (COMException ex)
    {
        uint errorCode = (uint)ex.ErrorCode;
        if (errorCode == 0x80210003)
        {
            // handle "There are no documents in the document feeder"
        }
        else
        {
            MessageBox.Show(ex.Message);
        }
    }