在不停止的情况下捕获异常消息

时间:2021-02-23 16:23:08

标签: vb.net exception

我有一个简单的 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 我的服务器并重试直到它工作。问题是异常消息有时会改变,所以我真的需要异常消息作为输出

2 个答案:

答案 0 :(得分: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,因此您可以在这里做的另一件事是定义然后引发事件,而不是返回值。

答案 1 :(得分:0)

您是否使用 TCPClient 进行连接???如果是,您只需编写 IsConnected 代码即可。 TCP 客户端保持连接,直到服务器或客户端退出。

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

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