自学内容网 自学内容网

C#获取程序异常的牛逼方法

1、 传统获取错误信息代码

try
            {
                Bitmap bitmap = new Bitmap("pcb.jpg");
                Bitmap bitmap2 = new Bitmap("循环.png");
                bitmap2.Save("pcb.jpg");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message  );
            }

输出:

GDI+ 中发生一般性错误。

上面的代码在catch中返回的信息是:“GDI+ 中发生一般性错误”,从这个错误提示根本看不出来到底是啥错误,下面介绍一种牛逼的方法来获取程序究竟发生了什么具体错误:

2、 加强版获取错误信息代码

获取错误代码如下:

    try
            {
                Bitmap bitmap = new Bitmap("pcb.jpg");
                Bitmap bitmap2 = new Bitmap("循环.png");
                bitmap2.Save("pcb.jpg");
            }
            catch (Exception ex)
            {
                int errorCode = Marshal.GetLastWin32Error();
                Win32Exception win32Ex = new Win32Exception(errorCode);
                Console.WriteLine("Error description: "  +win32Ex.NativeErrorCode + "," + win32Ex.Message+ ","+ex.Message  );
            }

输出:

Error description: 32,另一个程序正在使用此文件,进程无法访问。,GDI+ 中发生一般性错误。

从上面的输出可以看出是说文件被占用,因为bitmap 没有释放导致,所以这个Marshal.GetLastWin32Error方法返回由上一个非托管函数返回的错误代码这个功能可以结合catch中的信息,这样我们获取程序具体错误的途径又增加了一个,更便于我们查找导致程序发生错误的具体原因。

3、正确代码

调用 bitmap.Dispose();可以释放对本地文件pcb.jpg的占用。

 try
        {
            Bitmap bitmap = new Bitmap("pcb.jpg");
            bitmap.Dispose();
            Bitmap bitmap2 = new Bitmap("循环.png");
            bitmap2.Save("pcb.jpg");
        }
        catch (Exception ex)
        {
            int errorCode = Marshal.GetLastWin32Error();
            Win32Exception win32Ex = new Win32Exception(errorCode);
            Console.WriteLine("Error description: "  +win32Ex.NativeErrorCode + "," + win32Ex.Message+ ","+ex.Message  );
        }

原文地址:https://blog.csdn.net/qq_34059233/article/details/142420735

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!