C#反射问题,Invoke调用的方法异常处理
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Test1 test = new Test1();
foreach (var item in test.GetType().GetMethods())
{
try
{
item.Invoke(test, null);
}
catch (Exception)
{
MessageBox.Show("捕获异常");
}
}
}
public class Test1
{
public void method1()
{
throw new Exception("有异常");
}
public void method2()
{
throw new NotImplementedException();
}
}
}
如上所述:我想捕获到Invoke所调用的方法的异常。
如果直接try catch是无法捕获到异常,异常抛出到托管代码那边去了。
求哪位大神看看,给点提示。感激不尽! c# exception Invoke 反射 异常捕获
[解决办法]
试了你的代码,可以捕获到异常,没有到托管代码里啊
[解决办法]
因为Invoke调用函数好比是你在一个新的线程上执行函数。所以函数内的异常会先抛到运行时,然后才是你Invoke的层,然而你没有捕获运行时异常,故程序会崩溃,那你Invoke的catch就没机会继续捕获异常了,要解决你的这个问题也很简单。
找到Program.cs文件,捕获运行时异常,修改成如下即可。你就能看到异常捕获的顺序了。
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException +=
new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new Form1());
}
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
}