上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.8 应用程序的异常处理
现代软件工程有一个基本的出错处理原则:就近处理程序异常。比如说,你有如下Class A和Class B两段程序:
public Class A { //... protected float Divide( float x, float y ) { float z = x/y; return z; } } public Class B: A { //... public void Calc() { float[] x={100.2, 22.5,.....}; float[] y =( 500.0, 2.5,....}; for( int i = 0; i < x.Length; i++ ) { z= divide( y[i],x[i]); //... } } }
这两段程序在正常的情况下,没什么问题,但如果Class A中的y为0,那么z=x/y就会出错,一般情况下,我们需要把Class A中的方法Divide改为:
protected float Divide(float x, float y)
{
float z = 0;
try
{
z = y / x;
}
catch
{
//处理异常
}
return z;
}
即我们需要在最可能出现异常的地方加上try{} catch{} ,从而对程序异常加以处理。 这一原则说起来简单,做起来难,一旦有一个地方没有对异常进行适当的处理,可能会导致整个软件,甚至整个操作系统的崩溃。WPF的Application类中有一个事件:DispatcherUnhandledException,这个事件在应用程序未对其中的异常加以处理的情况下发生。我们可以对该事件进行处理,从而为应用程序把好最后的大门:
protected override void OnStartup(StartupEventArgs e) { ... this.DispatcherUnhandledException += new System.Windows.Threading. DispatcherUnhandledExceptionEventHandler( App_DispatcherUnhandledException); } void App_DispatcherUnhandledException(object sender, System.Windows.Threading. DispatcherUnhandledExceptionEventArgs e) { //对程序异常进行处理 }