Visual C#2005程序设计教程 教学课件 ppt 作者 崔淼 陈明非 第14章 异常处理与部署应用程序
第1章 Visual C#概述 第2章 C#语法基础 第3章 顺序结构程序设计 第4章 选择结构程序设计 第5章 循环结构程序设计 第6章 面向对象编程技术 第7章 继承,第8章 数组与自定义类型 第9章 菜单、工具栏与状态栏 第10章 鼠标键盘事件 第11章 ActiveX控件 第12章 数据库技术 第13章 开发Web应用程序 第14章 异常处理与部署应用程序,下一页,Visual C# 2005程序设计,上一页,章节目录,上一页,下一页,第14章 异常处理与部署应用程序 14.1 异常处理 14.1.1 用trycatch语句捕获异常 正常情况下,程序流进入try控制块,如果没有错误发生,就会正常操作。当程序流离开try控制块后,如果没有发生错误,将执行catch后的finally语句块或顺序执行;当执行try时发生错误,程序流就会跳转到相应的catch语句块。,章节目录,上一页,下一页,【例14-1】trycatch语句结构使用示例。在TextBox控件中接收两个数,单击【计算】按钮,显示这两个数的商。 要求使用trycatch语句结构识别并处理由除数或被除数为非数字引发的异常、由除数为零引发的异常。,章节目录,上一页,下一页,正常运行及各种异常处理结果,章节目录,上一页,下一页,【计算】按钮被单击时执行的事件过程代码如下: private void button1_Click(object sender, EventArgs e) int a, b , c; / 声明变量 try / 试图捕获异常 / 将文本转换为Int32类型的整数 a = Convert.ToInt32(textBox1.Text); ,章节目录,上一页,下一页,catch / 发生异常时的处理 label3 .Text =“提示:请将被除数的值输入为数字!“; return; ,章节目录,上一页,下一页,try b = Convert.ToInt32 (textBox2.Text); catch label3 .Text =“提示:请将除数的值输入为数字!“; return; ,try c = a / b; catch (DivideByZeroException) / 如果发生除数为0的异常 label3 .Text =“提示:除数不能为!“; return; / 正确运行时显示运算结果 label3.Text = “两数的商为:“+c.ToString(); ,章节目录,上一页,下一页,14.1.2 用tryfinally语句清除异常 有时可能希望在程序运行时,要求清除异常而不是错误处理。若希望使程序在出现异常时继续执行,且不显示出错信息。 此时可以使用try-finally语句实现清除异常。它不仅抑制了出错消息,而且所有包含在finally块中的代码在异常被引发后仍然会被执行。 【例14-2】设计一个Windows应用程序,用来检查指定文件是否存在。要求无论文件存在与否,程序均能正常结束并显示“感谢使用本软件”的信息框。,章节目录,上一页,下一页,文件存在或不存在的程序运行结果,章节目录,上一页,下一页,【检查】按钮被单击时执行的事件过程代码如下: private void button1_Click(object sender, EventArgs e) try / 判断文件是否存在 if (File.Exists(textBox1.Text) label2.Text = “该文件存在“; else label2.Text = “该文件不存在“; finally / 无论是否发生异常,都正常结束 MessageBox.Show(“感谢使用本软件!“,“程序结束“); ,章节目录,上一页,下一页,14.1.3 trycatchfinally语句结构 前面介绍的trycatch结构和tryfinally结构分别用来捕获处理异常和清除异常。本节介绍的trycatchfinally结构能将上述二者结合起来,使之成为一个整体。 【例14-3】在【例14-1】的基础上修改【计算】按钮单击事件过程的代码如下:,章节目录,上一页,下一页,private void button1_Click(object sender, EventArgs e) int a, b , c; try / 试图捕获异常 / 将文本转换为Int32类型的整数 a = Convert.ToInt32(textBox1.Text); b = Convert.ToInt32 (textBox2.Text); c = a / b; label3.Text = “两数的商为:“+c.ToString(); catch (FormatException) / 处理转换发生的异常 label3 .Text = “请将被除数或除数的值输入为数字!“; ,章节目录,上一页,下一页,catch (DivideByZeroException) / 处理除数为零的异常 label3 .Text = “除数不能为零!“; finally / 清除异常 MessageBox.Show(“感谢使用本软件,程序正常结束“); ,章节目录,上一页,下一页,14.1.4 抛出异常和常用异常类 1. 抛出异常 在程序设计时可能需要有意的引发某种异常,以测试程序在不同状态下的运行情况。Visual Sdudio 2005提供的throw方法就是专门用于人为引发异常的。 通常将这种主要用于测试程序的、能够自动引发异常的方法称为“抛出异常”。 例如下列代码将在程序运行时引发一个除数为零的异常。 throw new DivideByZeroException();,章节目录,上一页,下一页,2. 常用的异常类 MemberAccessException:访问错误:类型成员不能被访问 ArgumentException :参数错误:方法的参数无效 ArgumentNullException :参数为空:给方法传递一个不可接受的空参数 ArithmeticException :数学计算错误:由于数学运算导致的异常,覆盖面广 ArrayTypeMismatchException :数组类型不匹配 DivideByZeroException :被零除 FormatException:参数的格式不正确 IndexOutOfRangeException :索引超出范围,小于0或比最后一个元素的索引还大,章节目录,上一页,下一页,InvalidCastException :非法强制转换,在显式转换失败时引发 MulticastNotSupportedException :不支持的组播:组合两个非空委派失败时引发 NotSupportedException :调用的方法在类中没有实现 NullReferenceException :引用空引用对象时引发 OutOfMemoryException :无法为新语句分配内存时引发,内存不足 OverflowException :溢出 StackOverflowException:栈溢出 TypeInitializationException:错误的初始化类型:静态构造函数有问题时引发 NotFiniteNumberException:无限大的值:数字不合法,章节目录,上一页,下一页,14.1.5 用户自定义异常 对于某些特殊情况,程序员可以通过继承Exception来创建自己的异常类。 声明一个异常类的语法格式如下: class ExceptionName:Exception 引发自定义异常的格式如下: throw(ExceptionName);,章节目录,上一页,下一页,14.2 部署Windows应用程序 14.2.1 生成安装包 打开设计完成的Visual Sduio 2005项目,“文件”菜单“添加”下的“新建项目”命令。在图14-4所示的对话框“项目类型”列表中选择“安装和部署”,在模板列表中选择“安装向导”,单击【确定】按钮启动“安装项目向导”。 在“欢迎”界面中直接单击【下一步】按钮,在对话框中选择“为Windows应用程序创建一个安装程序”后单击【下一步】按钮。,章节目录,上一页,下一页,在 “选择要包含的项目输出”对话框中选择需要包含的内容(至少要包含“主输出”)单击【下一步】按钮。在对话框中单击【添加】按钮可将希望包含到安装项目中的一些辅助文件添加到安装包。 向导结束后将自动进入 “文件系统”窗口,单击【应用程序】文件夹可以看到前面添加到其中的主程序和附加文件。 鼠标指向窗口中“用户的程序菜单”单击右键,在弹出的快捷菜单中执行“添加”项下的“文件夹”命令,使安装程序能够在Windows“开始”菜单中创建一个目录。 选择新创建的文件夹,在文件夹内容窗格中单击右键,在弹出的快捷菜单中执行“创建新的快捷方式”命令。在打开的对话框中选择“应用程序文件”中的“主输出”(主程序)后单击【确定】按钮。,章节目录,上一页,下一页,14.2.2 编译安装项目 所有设置结束后,可在Visual Studio 2005工具栏中解决方案配置,由“Debug”(调试)改为“Release”(发布)。 选中安装项目名称,单击鼠标右键,在弹出的快捷菜单中执行“生成”命令,就能得到编译打包过的,存放在源程序文件夹下Release子文件夹中的安装文件Setup.exe文件。,章节目录,上一页,下一页,章节目录,上一页,下一页,