当第一次使用一个类的时候,
会先调用这个类的静态构造函数,
而在静态构造函数中发生异常,
为什么我捕捉不到。请问应该如何捕捉到这个异常??
会先调用这个类的静态构造函数,
而在静态构造函数中发生异常,
为什么我捕捉不到。请问应该如何捕捉到这个异常??
解决方案 »
- 用C#写一个xml文件处理工具,求指教
- 如何让 socket 完整接收数据,附代码、注释
- Datagridview的DataGridViewComboBoxColumn列,焦点问题
- c#程序可以在UNIX或LINUX中运行吗?
- 有几个关于数据库结构的问题,问下大家谢谢了
- 为什么第二次点击关闭按钮就……??
- C# 中 DataGridViewRow.HeaderCell.Value 值居中
- WPF中Treeview中的节点可以做到下图的样子吗?
- TextBox问题,请各位拔刀相助,不胜感激!
- treeview问题
- WinForm程序中引用了System.Web,但提示HttpUtility不存在
- Socket Close_Wait 状态
只是保证在第一次使用时已进行初使化,因此你无法在程序中捕捉。因为它比任何代码运行都早。
同意楼上的用Application.ThreadException
应该是可以捕获静态构造器的异常
不过静态构造函数中发生的异常,不会激发这个事件。
谢谢你的提示! 在静态构造函数中能够catch到异常,那么在类外怎么能知道发生了异常,
难道还要做一个事件,在静态构造函数的catch中激发这个事件?
这样是能够实现的。不过,我想知道静态构造函数的原理,它把异常句柄给了谁?
再次感谢你的迅速解答! 其实你把构造函数作为静态的,就应该尽量避免构造函数出现异常,
或者说把容易出现异常的部分不应该放到静态构造函数当中。
---- 这只能说是一个对策,其原理能否给分析一下?
{
protected static string _name;
protected static string _assemblyPath;
public static string Name
{
get {return _name;}
}
static Test()
{
_name = "XXX";
//这里想实现一些对资源的初期化,有可能发生异常,用以下代码模拟异常
throw new Exception("static exception");
}
}public class Starter()
{
public static void Main()
{
try
{
System.Console.WriterLine(Test.Name);
}
catch {}
}
}这是我的测试程序,请问对于static构造函数的异常就没有办法了吗?
--------------
更定有办法.....静态构造函数我竟然还每用过.....关注一下.
只有创建类的实例或者引用类的任何静态成员才激发静态构造函数;
如果类中包含用来开始执行的Main方法,则该类的静态构造函数将在调用Main方法之前执行。这些我都知道,可还是不能理解:
我在代码中只有 System.Console.WriterLine(Test.Name);
这是第一次访问Test类,
那么不就是这个时候调用静态构造函数,
那么此时我怎么就捕捉不到异常呢?
{
static void Main(string[] args)
{ try
{
Console.WriteLine(a.B);
}
catch
{
Console.WriteLine("捕捉到异常");
}
Console.ReadLine();
}
}
class a
{
static string b;
public static string B
{
get { return b; }
}
static a()
{
throw new System.Exception();
}
}
可以捕捉啊
{
static void Main(string[] args)
{try
{
Console.WriteLine(a.B);
}
catch
{
Console.WriteLine("捕捉到异常");
}
Console.ReadLine();
}
}
class a
{
static string b;
public static string B
{
get { return b; }
}
static a()
{
throw new System.Exception();
}
}
.....
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
......
static void MyHandler(object sender, UnhandledExceptionEventArgs args) {
Exception e = (Exception) args.ExceptionObject;
Console.WriteLine("MyHandler caught : " + e.Message);
}
这是第一次访问Test类,
那么不就是这个时候调用静态构造函数,
那么此时我怎么就捕捉不到异常呢?
——————————————————————————应该在这之前就已经执行静态构造函数了
所以我们catch到的异常的InnerException才是静态构造函数抛出的异常。MS网站上一篇讲静态构造函数的文章:
http://msdn.microsoft.com/msdnmag/issues/05/01/StaticsinNET/default.aspx