none
我看到C#全局异常类是在Program.cs里面实现的,Vb.net 该如何做呢? RRS feed

  • 问题

  • VB.net 注册全局异常类。该如何实现。

    下面是C# 的代码。

    using System;
    using System.Threading;
    using System.Diagnostics;
    using System.Collections.Generic;
    using System.Windows.Forms;
    
    namespace UDD.Catering.UIL
    {
    static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                
                // 全局异常注册
                ApplicationEventHandlerClass AppEvents = new ApplicationEventHandlerClass();
                Application.ThreadException += new ThreadExceptionEventHandler(AppEvents.OnThreadException);
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                FormMain formMain = FormMain.Instance;
                Application.Run(formMain);
            }
    
            // 全局异常处理
            public class ApplicationEventHandlerClass
            {
                public void OnThreadException(object sender, ThreadExceptionEventArgs e)
                {
                    FormSysMessage.ShowException(e.Exception); // 调用FormSysMessage窗体,显示异常信息。
                }
            }
        }
    }
    感谢各位大大!

    2016年9月23日 13:19

答案

  • VB和C#确实不同。你可以尝试:

    1)右键项目,属性,点击圈圈中部分,生成事件类:

    2)然后编写如下代码:

    规则有点:MyApplication_事件名字(参数……)

    示例代码:

    Namespace My
        ' 以下事件可用于 MyApplication: 
        ' Startup: 应用程序启动时在创建启动窗体之前引发。
        ' Shutdown: 在关闭所有应用程序窗体后引发。 如果应用程序异常终止,则不会引发此事件。
        ' UnhandledException: 在应用程序遇到未经处理的异常时引发。
        ' StartupNextInstance: 在启动单实例应用程序且应用程序已处于活动状态时引发。
        ' NetworkAvailabilityChanged: 在连接或断开网络连接时引发。
        Partial Friend Class MyApplication
            Public Sub MyApplication_UnhandledException(sender As Object, e As ApplicationServices.UnhandledExceptionEventArgsHandles MyBase.UnhandledException
     
                '做你的事情
     
            End Sub
        End Class
    End Namespace

    ASP.NET Forum
    StackOverFlow
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    • 已标记为答案 可推 2016年9月24日 2:46
    2016年9月24日 2:20
    版主

全部回复

  • VB.NET 这样实现

    Imports System Imports System.Windows.Forms

    Public Shared Sub MyApplicationInitialization()
       
    AddHandler System.Windows.Forms.Application.ThreadException, AddressOf MyThreadExceptionHandler

        Application
    .SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)

       
    AddHandler System.AppDomain.CurrentDomain.UnhandledException, AddressOf MyUnhandledExceptionHandler
    End Sub

    Sub MyUnhandledExceptionHandler(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
       
    'your logic here
    End Sub

    Sub MyThreadExceptionHandler(ByVal sender As Object, ByVal e As ThreadExceptionEventArgs)
       
    'your logic here
    End Sub

    来自 http://stackoverflow.com/questions/5300303/catching-threadingexception-in-vb-net-when-sub-main-is-not-accessible


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年9月23日 16:05
  • 请问下我该写到哪个类里面。是启动窗口。还是单独添加一个模板文件。在启动窗口调用。
    2016年9月23日 23:57
  • 请问下我该写到哪个类里面。是启动窗口。还是单独添加一个模板文件。在启动窗口调用。

    单独创建一个VB文件。Program.vb。和C#格式完全一样。

    然后项目属性设置启动项是Windows应用程序。


    ASP.NET Forum
    StackOverFlow
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2016年9月24日 0:22
    版主
  • Program.vb 好像没有与程序关联起来。我的图片如下


    • 已编辑 可推 2016年9月24日 1:35 补全截图
    2016年9月24日 1:29
  • UnHandledException:是一个最终错误捕获器。用于捕获Application.ThreadException无法捕获的错误。

    明显例子是:你尝试创建一个Thread,在Thread里边抛出异常,然后就可以使用AppDomain的UnhandledException捕获。但是无法忽略异常,程序仍然要崩溃。


    ASP.NET Forum
    StackOverFlow
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2016年9月24日 1:39
    版主
  • Program.vb  这个类如何与启动程序关联。启动程序类型:Windows 窗体应用程序。需要选择一个Winform.

    但启动的winform 好像没有使用Program.vb 这个类。程序无法捕获错误,使用自定的错误窗口弹出提示。

    2016年9月24日 2:01
  • VB和C#确实不同。你可以尝试:

    1)右键项目,属性,点击圈圈中部分,生成事件类:

    2)然后编写如下代码:

    规则有点:MyApplication_事件名字(参数……)

    示例代码:

    Namespace My
        ' 以下事件可用于 MyApplication: 
        ' Startup: 应用程序启动时在创建启动窗体之前引发。
        ' Shutdown: 在关闭所有应用程序窗体后引发。 如果应用程序异常终止,则不会引发此事件。
        ' UnhandledException: 在应用程序遇到未经处理的异常时引发。
        ' StartupNextInstance: 在启动单实例应用程序且应用程序已处于活动状态时引发。
        ' NetworkAvailabilityChanged: 在连接或断开网络连接时引发。
        Partial Friend Class MyApplication
            Public Sub MyApplication_UnhandledException(sender As Object, e As ApplicationServices.UnhandledExceptionEventArgsHandles MyBase.UnhandledException
     
                '做你的事情
     
            End Sub
        End Class
    End Namespace

    ASP.NET Forum
    StackOverFlow
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    • 已标记为答案 可推 2016年9月24日 2:46
    2016年9月24日 2:20
    版主