WinFrom中添加全局异常处理
在Main中添加
ThreadExceptionHandler handler = new ThreadExceptionHandler();
Application.ThreadException += new ThreadExceptionEventHandler( handler.Application_ThreadException);
System.Windows.Forms.Application.Run(new Form1());
同时增加异常处理类
internal class ThreadExceptionHandler
{
///
/// Handles the thread exception.
///
public void Application_ThreadException( object sender, ThreadExceptionEventArgs e)
{
try
{
// Exit the program if the user clicks Abort.
DialogResult result = ShowThreadExceptionDialog(
e.Exception);
if (result == DialogResult.Abort)
Application.Exit();
}
catch
{
// Fatal error, terminate program
try
{
MessageBox.Show("Fatal Error",
"Fatal Error",
MessageBoxButtons.OK,
MessageBoxIcon.Stop);
}
finally
{
Application.Exit();
}
}
}
///
/// Creates and displays the error message.
///
private DialogResult ShowThreadExceptionDialog(Exception ex)
{
string errorMessage =
"Unhandled Exception:\n\n" +
ex.Message + "\n\n" +
ex.GetType() +
"\n\nStack Trace:\n" +
ex.StackTrace;
return MessageBox.Show(errorMessage,
"Application Error",
MessageBoxButtons.AbortRetryIgnore,
MessageBoxIcon.Stop);
}
}
.Net开发过程中的一些细节
equals()和运算符==的区别
==比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量中存储的内存地址是否相同
equals()是两个变量是否是对同一个对象的引用,即比较内存地址所指对象的内容的比较
const和readonly的区别
const是编译时的常量,readonly是实例创建后(运行时)的常量
对任何const的常量修改后,都要对整个项目进行重新编译,而对readonly的计算方式修改后,只需要重新编译该类库即可
class和struct的区别
struct是值类型,它的相关结构均继承于System.ValueType类,它本身存储了值,而不包含指向值的指针
class是引用类型,它继承于System.Object类,它本身不包含值,只存储指向值的指针
如果类型只表示数据的时候,可以考虑使用struct,相比class,它具有更高的效率
string和StringBuilder的区别
string是值类型,其长度和内容是不可变的,任何对string变量的操作,都相当于创建新的对象
StringBuilder是可变的字符串动态操作类
StringBuilder在执行字符串操作时的效率是string的几百倍,因此,日常开发中应尽量使用StringBuilder而非string