【问题标题】:Catch Exception Message without stopping在不停止的情况下捕获异常消息
【发布时间】:2021-05-25 22:53:40
【问题描述】:

我有一个简单的 Try Catch 函数,例如:

Try
'do that
Catch
'didn't work now try again
End Try

现在我希望错误/捕获消息显示为消息框,适用于:

Catch ex As Exception
Messagebox.Show(ex.message)

问题在于它总是在向我显示我想要阻止的错误消息后停止/退出应用程序。这应该尝试一些事情,直到它工作并始终显示错误消息而不会停止。那可能吗?我需要它作为已编译的 exe,因此不能选择调试。

作为解释我要做什么: 基本上我有一个计时器,它每 10 秒执行一次对我的服务器的请求。它检查我的服务器是否已启动并已连接。如果它无法访问我的服务器,它应该准确地向我显示为什么它没有连接但它不应该停止的消息,它应该在 10 秒后继续 ping 我的服务器并重试直到它工作。问题是异常消息有时会发生变化,所以我真的需要异常消息作为输出

【问题讨论】:

  • 这是vb.net 不是c#。另外值得一提的是,不要使用 catch 语句来描述代码/程序流,这是糟糕的设计。我也觉得,您遗漏了重要的代码,这些代码可能是您遇到的问题的根本原因
  • vb.net 或 c# 都没有关系,因为两者都可以转换为其中任何一个。我可以将代码从 c# 转换为 vb.net,反之亦然。是的,我遗漏了“重要”代码,因为它会造成太多混淆,因为这是一个简单的问题,如何在不停止的情况下输出异常消息。没有必要显示任何进一步的代码。

标签: vb.net exception


【解决方案1】:

听起来你现在有一个有时会抛出这样的方法:

 Public Sub CheckServer()
    ' do something to test the server
 End Function

如果代码没有像这样隔离到它自己的方法,应该是

你想这样称呼它:

Try 
    CheckServer()
Catch ex As Exception
    MessageBox.Show(...)
End Try

我建议在方法中移动 Try/Catch 并使其返回一个值:

 Public Function CheckServer() As String
    Try
        ' do something to test the server
    Catch ex As Exception
        Return ex.Message
    End Try
    Return String.Empty
 End Function

然后这样称呼它:

Dim errorMessage As String = CheckServer()
If Not String.IsNullOrEmpty(errorMessage) Then
     SendAlert(errorMessage)
End If

你还有一个单独的警报方法:

Public Sub SendAlert(alertText As String)
    SomeControl.Text += $"{Now} -- {alertText}{vbCrLf}"
End Sub

请注意,我没有使用 MessageBox,因为它会阻止您的 UI。但是这里的想法是,这样可以很容易地更改您想要在收到警报时对它们执行的操作。例如,您可以create a toast notification

由于您使用的是 WinForms,您可以在这里做的另一件事是定义然后引发一个事件,而不是返回一个值。

【讨论】:

  • 嗯,它有点复杂。基本上我有一个计时器,它每 10 秒执行一次对我的服务器的请求。它检查我的服务器是否已启动并已连接。如果它无法访问我的服务器,它应该准确地向我显示为什么它没有连接但它不应该停止的消息,它应该在 10 秒后继续 ping 我的服务器并重试直到它工作。问题是异常消息有时会发生变化,所以我真的需要异常消息作为输出。
  • 好的。你知道MessageBox 会阻塞 UI 线程上的程序流,直到你做出响应,对吧?
  • 是的,我知道。我尝试将它作为控制台消息输出,但我没有让它适用于我的(不是控制台)窗体应用程序。
  • 好吧,我想这可能行得通。我会尝试并给你一个回应。非常感谢您的帮助和时间。
  • 在状态栏或标签中显示错误消息,而不是使用消息框。
【解决方案2】:

你是在用 TCPClient 连接吗???如果你是,你可以只写一个 IsConnected 代码。 TCP 客户端保持连接,直到服务器或客户端断开。

服务器不接受连接时最常见的错误消息是“服务器没有及时正确响应消息”

不断向服务器发送请求并不理想。当连接丢失时,您需要一个通知来...然后将计时器设置为不断尝试重新连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多