【问题标题】:How to catch an exception and show its details [closed]如何捕获异常并显示其详细信息
【发布时间】:2014-01-24 03:44:06
【问题描述】:

我想知道如何捕获错误,然后在自定义 ListBox 或其他内容中显示其详细信息。这个想法是允许出现一个简单的自定义消息,比如“糟糕,出了点问题!”但仍然能够提供故障排除信息。如果有人可以帮助我构建此代码,我将非常感激。

假设我有可能导致错误的代码,例如连接到互联网。我如何能够捕获错误并以单独的形式(弹出窗口)显示它?

如果这个接缝真的很基本,我深表歉意,但我是这个东西的新手,我只是不喜欢正常的错误窗口。

【问题讨论】:

标签: vb.net exception-handling


【解决方案1】:

使用以下代码向用户输出错误:

Try
'code
Catch ex As Exception
   MessageBox.Show(string.Format("Error: {0}", ex.Message))
End Try

我想知道如何捕获错误然后显示 它在自定义列表框或其他东西中的详细信息。

如果您想将错误添加到列表框:

Try
'code
Catch ex As Exception
    listBox1.Items.Add("Whoops, something went wrong!")
End Try

【讨论】:

    【解决方案2】:

    最后我得到了这个:

    Try    
        'Code which may error
    Catch ex As Exception
        MessageBox.Show("Whoops! An error was encountered during the login-in stage. The Server may be offline, un-reachable or your Server Credentials may be in-correct. Please contact U.G Studio for further details. " & _
        vbNewLine & "" & vbNewLine & String.Format("Error: {0}", ex.Message))
    

    它允许我显示自定义消息,同时仍保留有关错误的“技术”信息。

    感谢大家的帮助!

    【讨论】:

    • 这和我的回答一模一样,你不接受我的回答,复制它并接受它,这是低人一等。
    • @MaxMommersteeg 抱歉,我以为我也将您的答案标记为答案。但是,这也不是“完全”您的答案;部分原因是 Jeff Bridgman 的回答让我找到了这个解决方案。我从来没有意识到,在共同努力解决问题的过程中,每个人都需要拍拍背——但无论如何感谢你的帮助,它确实——部分地——引导我找到了解决方案。我发布这篇文章的原因是为了让其他偶然发现这个帖子的人简化它。
    • 考虑使用Environment.Newline 而不是VbNewLine - 请参阅jaypm.com/2012/08/… 也考虑使用String.Format()StringBuilder,因为它们在处理字符串时具有性能优势
    【解决方案3】:

    这是一个帮助您入门的代码模板:

    Try
      'Your code
    Catch ex As Exception
      MessageBox.Show("Woops, something's went wrong!")
      'get troubleshooting info out of ex, stack trace perhaps
    End Try
    

    【讨论】:

      【解决方案4】:

      如果你想要一些超级简单的东西,你可以这样做:

      Try
         'Try connecting to the internet
      Catch ex As WebException
         Dim message = String.Format(
             "Encountered an error while connecting to internet: {0}", ex.Message)
         MessageBox.Show(message)
      End Try
      

      但是,如果您想要更花哨的东西,我建议您创建一个新表单,上面可能带有 LabelRichTextBox。您可以给它一个构造函数,该构造函数接受异常并填充表单的控件。我会在异常上使用ToString 来显示详细信息,因为这将打印出一个很好的堆栈跟踪,并递归地打印出内部异常的任何细节:

      Public Sub New(ex As Exception)
         InitializeComponent() 'This call is required by Visual Studio.
         Me.Label1.Text = String.Format(
             "Encountered the following error: {0}", ex.Message)
         Me.RichTextBox1.Text = ex.ToString()
      End Sub 
      

      您可以像这样从主窗体中调用它:

      Try
         'Try connecting to the internet
      Catch ex As WebException
         Dim errorForm = New ErrorForm(ex)
         errorForm.Show()
      End Try
      

      【讨论】:

        【解决方案5】:

        您可以编写一个函数来代替 MsgBox,例如:

           Public Function LogMsgBox(
                                 ex As Exception,
                                 Prompt As String,
                                 Optional Buttons As MessageBoxButtons = MessageBoxButtons.OK,
                                 Optional Title As String = "OIS Error",
                                 Optional ProgrammerNote As String = "",
                                 Optional SuppressMsgBox As Boolean = False,
                                 Optional FormRef As Object = Nothing) As MsgBoxResult
        

        在该功能中,您可以随心所欲 - 很可能会显示一个对话框或更多您喜欢的表格。

        记录错误很方便,以便您获得有关问题的反馈。用户只是倾向于点击问题而不是报告问题。

        还可以查看适用于 VB 的应用程序框架 - 它可以捕获用户也未能报告的未处理错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-18
          • 1970-01-01
          • 2013-11-13
          • 2012-10-19
          • 2011-03-20
          • 1970-01-01
          相关资源
          最近更新 更多