尝试捕获异常错误

本文关键字:错误 捕获异常 | 更新日期: 2023-09-27 18:25:03

当我将try catch exception与这段代码一起使用时,我会得到以下错误:

"并非所有代码路径都返回值"

我的代码:

   public System.Drawing.Image Scan()
    {
        try
        {
           const string formatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
            WIA.CommonDialog scanDialog = new WIA.CommonDialog();
            WIA.ImageFile imageFile = null;
            imageFile = scanDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.GrayscaleIntent,
            WIA.WiaImageBias.MinimizeSize, formatJPEG, false, true, false);
            WIA.Vector vector = imageFile.FileData;
            System.Drawing.Image i = System.Drawing.Image.FromStream(new System.IO.MemoryStream((byte[])vector.get_BinaryData()));
            return i;
        }
        catch (COMException ce)
        {
            if ((uint)ce.ErrorCode == 0x800A03EC)
            {
               return ce;
            }
        }

尝试捕获异常错误

像下面这样更改catch块可以工作,但仍然面临一些问题。因为您的方法返回类型Image,而您在catch块中返回COMException。我建议你抛出异常或登录捕获块

if ((uint)ce.ErrorCode == 0x800A03EC)
{
    //DO LOGGING;
}
else
{
    throw ce;
}

这里有两个不同的问题。首先,如果条件不满足,您的catch block将不会返回任何内容。其次,catch块中的返回类型与try块中的不同。

你可能想要在你的捕获块中有更像这样的东西:

catch (COMException ce)
{
    if ((uint)ce.ErrorCode == 0x800A03EC)
        return null;  // Don't return anything if a specific code was found
    throw ce;         // Rethrow the exception for all other issues.
}