日期:2014-05-17  浏览次数:21083 次

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);
          &nb