用Try Catch语句有什么好处

bapiyang008 2010-10-22 08:49:47
大侠“fangxinggood”说:
有点多事,在UI层的事件处理中没有Try,Catch这样导致Application轻易就崩溃。
而且不能Log错误堆栈,不方便错误调查。应该加上。


在下不经常使用“Try Catch”语句,不熟悉它的功能。只知道他是抛出异常然后捕获异常,进行处理。

问题1:Try Catch语句怎样使用?
问题2:Try Catch语句有什么功能?
问题3:何为“UI”层,就是用户操作界面?
问题4:“不能Log错误堆栈”,什么是“Log错误”

...全文
5284 56 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangyu19910407 2013-06-24
  • 打赏
  • 举报
回复
正在学习中。。。
zhuzizuodesi 2012-06-27
  • 打赏
  • 举报
回复
哪个是最佳到呢
qimingxingwen 2012-05-25
  • 打赏
  • 举报
回复
又多了解了些, 哈哈
f2831890 2011-08-03
  • 打赏
  • 举报
回复
都是高手啊。。。看的眼累啊 不过学到不少东西。。。好
changeZ 2010-12-15
  • 打赏
  • 举报
回复
异常机制值得学习,不管在哪里...
ysz89757 2010-10-24
  • 打赏
  • 举报
回复
学习下
aa_22_999 2010-10-24
  • 打赏
  • 举报
回复
之前在CE5.0环境下写程序,
因为没有用TRY CATCH,
碰到异常就把系统给弄死掉了,
扣电池重新启动....
cjh200102 2010-10-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]

显然不只是UI层,任何可能出现错误而你设计时必然无法左右的地方,都可以用try,catch。
电脑上本没有异常机制,就像c++中不限制一个字节的byte等于255时依然可以执行加1操作一样。异常机制是一种额外的保护机制,当你的软件需要时,可以通过throw new Exception()抛出异常,以一种非正常结束的状态结束函数调用通知调用方,调用的地方如果没有使用try,catch捕获异常,则……
[/Quote]
支持楼上观点
lifehappy2010 2010-10-24
  • 打赏
  • 举报
回复
只知道是捕捉异常用的,还是不太会用。
rcx100 2010-10-24
  • 打赏
  • 举报
回复
学习了
lwc913 2010-10-23
  • 打赏
  • 举报
回复
代码都写上try{}catch()finally{}
lid123456 2010-10-23
  • 打赏
  • 举报
回复
异常处理
  • 打赏
  • 举报
回复
去了解一下什么是 Application 的ThreadException事件即可。
xiaoyuan402 2010-10-23
  • 打赏
  • 举报
回复
try catch
就是可能会出错的代码块用这个包起来,
这样就能抛出异常,可以检查代码
peng2739956 2010-10-23
  • 打赏
  • 举报
回复
关注 LZ的结帖率
bapiyang008 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 hyd85716 的回复:]
白痴问题总是有很多人回答
这样的问题让他去死好了 或者看看书
别来论坛偷懒
[/Quote]

在下可没有偷懒的意思,听听大侠的意见可以少走很多的弯路的,可以学到很多自己一个人学不到的东西。在交流中学习。。。
hyd85716 2010-10-22
  • 打赏
  • 举报
回复
白痴问题总是有很多人回答
这样的问题让他去死好了 或者看看书
别来论坛偷懒
机器人 2010-10-22
  • 打赏
  • 举报
回复
这种分散在各个button里的if判断和MessageBox处理,可以统一的抽象出来。

做成一个个内部的Validate方法,然后自定义InputCheckException,

形如:


public partial class Form1 : Form
{
private Dictionary<string, string> messagePool = new Dictionary<string, string>();

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
// Message可以统一放到Resource里。
messagePool.Add("E0001", "请输入用户名。");
messagePool.Add("E0002", "请输入密码。");
}

private void ValidateNullEmptyInput(Control control)
{
if (string.IsNullOrEmpty(control.Text))
throw new InputCheckException(control.Name, "E0001");
}

private void HandlerInputException(InputCheckException inputEx)
{
MessageBox.Show(messagePool[inputEx.MessageID]);
Control[] controls = this.Controls.Find(inputEx.ControlName, true);
if (controls != null && controls.Length > 0)
controls[0].Focus();
}

private void button1_Click(object sender, EventArgs e)
{
try
{
// 输入验证
ValidateNullEmptyInput(this.textBox1);

// 调用某业务逻辑
// logicXXX.Execute(...);

}
catch (InputCheckException inputEx)
{
// 处理验证错误
HandlerInputException(inputEx);
}
catch (Exception ex)
{
MessageBox.Show("未知的错误:" + ex.Message);
// Log错误堆栈
Trace.WriteLine(ex.StackTrace);
}
}
}

public class InputCheckException : ApplicationException
{
public string ControlName
{ get; private set; }

public string MessageID
{ get; private set; }

public InputCheckException(string controlName, string messageID)
{
ControlName = controlName;
MessageID = messageID;
}


这样整个代码的结构,看上去就更加合理,也容易维护了。
aspluo 2010-10-22
  • 打赏
  • 举报
回复

每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
IvyAngta 2010-10-22
  • 打赏
  • 举报
回复
LZ啊 你如果一下子不知道或者还不了解为什么的话!你只要记住,在可能或者肯定会出现错误信息,以及你担心会出现状况的位置加上TRY CATCH FINALLY 这个东东 是不会错的.
加载更多回复(33)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧