private void BeginWaitingConnection()
{
try
{
Convert.ToInt32("abc");
this.thWaitingConnect = new Thread(new ThreadStart(WaitingConnection));
this.thWaitingConnect.IsBackground = true;
this.thWaitingConnect.Start();
}
catch (Exception ex)
{
Log.AddErr(ex);
throw ex;
}
} private void WaitingConnection()
{
try
{
Convert.ToInt32("abc");
}
catch (Exception ex)
{
Thread.CurrentThread.Abort();
Thread.CurrentThread.Join();
throw ex;
}
}
代码如上. 问题1:
蓝色字的Convert,也就是在线程外发生异常,catch之后可以正常往上抛.
但红色字的Convert,也就是在线程里发生异常,catch之后不能正常往上抛.
我的目的是写入日志,那在线程里发生异常,应该怎么处理呢? 难道就在线程里try catch,然后直接写日志吗?
问题2:
线程内发生异常,是不是应该Abort,将他停掉呢?谢谢指教
解决方案 »
- 继68,16问题之后,我还想问一个巨大的问题,谢谢
- 404错误页面跳转问题请教!!!
- GridView导出到excel时间日期为乱码######如何控制Excel的单元格数据格式 希望指点!
- 简易计算器及源码
- 问个问题:整数数组
- java 和 .net哪个更有前途?
- 求问继承、虚方法多态性和接口各自的精妙之处
- ========请大侠助小弟一把,把这段VB模块里的代码改写成C#放在类文件中,用在winform中。谢谢!!=======
- 分不多了,为什么我一个现成的项目拷到本机来(从VSS上签出来),就创建不了项目了呢.我的是BS的程序
- 如何执行已编译的exe程序
- 请问,浮点数是不是越大,精度越小????????
- 如何在tabcontrol的tabpage上放工具栏?
2.即使线程不发生异常,catch后面没有代码,线程自然会终止。发生异常,也只是先执行catch之内的再执行catch之后的,没有的话自然终止,而且,使用throw再次抛出异常后,线程也会因为未处理异常终止。
只要组织好try...catch...,完全可以使线程在发生不可恢复的异常之后,自然地终止,无须Abort,无须join。
那请问:我想写日志的话,是在线程里try catch,然后在catch里面写日志吗???
也不是窝如果我用线程调用 A(), A()调用B(), B()调用C(), C()调用D(), 但是线程里是不能throw的.那我不是要在每个方法里try catch,然后再写日志? 这样代码显得比较累赘,有什么方法改善吗?
private void threadProc()
{
...
try
{
...
try
{
...
}
catch
{
...
throw
}
try
{
...
}
catch
{
...
throw
}
...
catch
{
...//可以在这里做日志
//不要再throw就是了
}
}
最后的这个try...catch...一般来说,使用了某些资源的话,还应该加上finally块。
如果这些方法调用这么复杂的话,我建议你好好检查一下你的代码。我的代码是:
1.线程调用WaitingConnection(),用作等待客户端连接.
2.当有客户端连上来的时候, 调用AnalyseCmd(), 用作分析命令(例如:登陆).
3.分析到是哪种命令,再调用相应的处理方法请问,这存在什么问题吗?
你不要告诉我,这几个方法都是线程方法。