日期:2014-05-20  浏览次数:20923 次

c#遇到未捕获异常后并自行处理后,如何屏蔽这个消息框:遇到问题需要关闭。我们对此引起的不便表示抱歉。
c#遇到未捕获异常后并自行处理后,还是会弹出这个讨厌的消息框:遇到问题需要关闭。我们对此引起的不便表示抱歉。

遇到未捕获异常后(如OutOfMemoryException),我们可能要让程序自己重启或写日志,如果弹出这个,等于要人工干预。装到服务器上的软件,要自行处理并恢复(如重启软件),让人工干预就太过分了。

在网上找了很多代码,都是无非是下面的样子:
http://code.iteye.com/blog/1306217
http://www.cnblogs.com/cgzwwy/archive/2008/08/31/1280597.html
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.setunhandledexceptionmode.aspx
http://blog.163.com/muyao520@126/blog/static/6955545620106148493899/

http://bbs.csdn.net/topics/320185539,这个人的问题也我一样。

http://weblogs.asp.net/bsimser/archive/2008/04/18/ui-exception-handling-vs-appdomain-exceptions.aspx,老外写的。也没有解决办法。


/// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            //处理未捕获的异常   
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            //处理UI线程异常   
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            //处理非UI线程异常   
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            MessageBox.Show((e.ExceptionObject as Exception).Message);
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message);
        }




namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ThreadStart newThreadStart = new ThreadStart(newThread_Execute);