首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#反射有关问题,Invoke调用的方法错误处理

2013-01-27 
C#反射问题,Invoke调用的方法异常处理 public partial class Form1 : Form{public Form1(){InitializeComp

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)
        {
            

        }

热点排行