【问题标题】:Error when On Error Resume NextOn Error Resume Next 时出错
【发布时间】:2017-10-01 13:57:04
【问题描述】:

我无法构建 exe:

1> ------ 组装开始:项目:B,配置:调试任何 CPU

B.vb (38.9): error BC36595: 该方法不能同时包含 “On Error Resume Next”语句并定义使用的变量 在 lambda 表达式或查询表达式中。

组装:成功:0,错误:1,无变化:0,跳过:0

从第 37 行到第 48 行:

Sub Read(ByVal ar As IAsyncResult)
    On Error Resume Next
    If TCP.GetStream.DataAvailable And TCP.GetStream.CanRead Then
        Dim tt As New Thread(AddressOf Data) : tt.IsBackground = True : tt.SetApartmentState(ApartmentState.STA) : tt.Start(DirectCast(bf.Deserialize(TCP.GetStream), Byte()))
        TCP.GetStream.Flush() : TCP.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf Read, Nothing)
        Exit Sub
    Else
        GoTo r
    End If 
r:
    Disconnect()
End Sub

我正在尝试使用 try\catch,但不知道是否正确? :

Sub Read(ByVal ar As IAsyncResult)
    Try
        If TCP.GetStream.DataAvailable And TCP.GetStream.CanRead Then
            Dim tt As New Thread(AddressOf Data) : tt.IsBackground = True : tt.SetApartmentState(ApartmentState.STA) : tt.Start(DirectCast(bf.Deserialize(TCP.GetStream), Byte()))
            TCP.GetStream.Flush() : TCP.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf Read, Nothing)
            Exit Sub
        End If
    Catch
        GoTo r
    Finally
    End Try
r:
    Disconnect()
End Sub

【问题讨论】:

  • 这是 VB.NET 而不是 C#
  • 顺便说一句。 On Error Resume Next 应尽快丢弃。使用提供的 NET Structured exception handling (Try/Catch/Finally)
  • 我不明白这么多人一直把 VB.NET 误认为是 C#...
  • 您是否考虑过错误消息的含义,即您不能使用On Error Resume Next 并定义在 lambda 表达式或查询表达式中使用的变量的可能性?我建议您采纳@Steve 的建议并使用 Try/Catch/Finally 块而不是 On Error
  • 是的,谢谢,我会尝试 try\catch 并编辑问题

标签: .net vb.net compiler-errors


【解决方案1】:

该错误消息上的documentation 告诉您如何修复它:

纠正这个错误

  1. 将使用 On Error Goto 语句的异常处理代码替换为 Try...Catch 语句。

Try ... Catch 将包含以下部分:

  • Try - 应该执行什么
  • Catch - 如果在 Try 中抛出异常应该执行什么
  • Finally - 应该执行什么是否有异常

我正在尝试使用 try\catch,但不知道是否正确?

可能可以工作,但是Exit SubGoto 是不必要的,而且会造成混淆。我会尝试:

Sub Read(ByVal ar As IAsyncResult)
    Try
        If TCP.GetStream.DataAvailable And TCP.GetStream.CanRead Then
            Dim tt As New Thread(AddressOf Data) : tt.IsBackground = True : tt.SetApartmentState(ApartmentState.STA) : tt.Start(DirectCast(bf.Deserialize(TCP.GetStream), Byte()))
            TCP.GetStream.Flush() : TCP.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf Read, Nothing)
        End If
    Catch
        Disconnect()
    Finally
    End Try
End Sub

但如果出现异常,只调用Disconnect() 似乎很奇怪。否则连接是否应该保持打开状态?调用者如何知道Disconnect 是否被调用?

【讨论】:

  • 是的,谢谢,但我不知道如何正确逻辑:\
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 2019-09-08
相关资源
最近更新 更多