0

**编辑

  1. 在高级编译选项中取消选中“启用优化”不会导致此错误。

  2. 去掉代码中的 For 循环也不会导致这个问题。

  3. 将 SF 变量分配给一个类级别的变量并检查它是否无效不会导致此问题。

结束编辑**

我的按钮单击事件处理程序具有局部变量 SF 和 HostSystem,我使用 EF6 从 SQLite DB 填充它们。

click 事件处理程序用 Async 方法表示,因为它产生一个任务并等待它。

在 finally 块中,我通过调用 IsNothing/IsNot Nothing 方法检查 SF 是否为空。但是,这些构造会引发错误(“对象引用未设置为对象的实例”)。仅在发布模式下发生。

我可以在 4.5.2 中重现的代码如下。任何有关 IsNothing 为何抛出错误的帮助将不胜感激。一如既往,谢谢。

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim Hostsystem As SupportSystem
    Dim SF As SendFile

    Try

        SF = db.SendFiles.FirstOrDefault(Function(SFile) SFile.Name = "DailySummary")
        Hostsystem = db.SupportSystems.FirstOrDefault(Function(x) x.Name = SF.SupportSystemName)


        For i = 1 To 1

            Dim TaskSendFile As Task(Of String) = Task(Of String).Factory.StartNew(Function()
                                                                                       Throw New ApplicationException("App Error")
                                                                                       Return ""
                                                                                   End Function)
            Await TaskSendFile

        Next

        MessageBox.Show("All Done")

    Catch ex As Exception
        MessageBox.Show("Error : " + ex.Message)
    Finally
        Try
            **'The below check is what is throwing error.** 
            If Not IsNothing(SF) Then
            End If
        Catch ex As Exception
            MessageBox.Show("Unexpected Error in the finally block. " + ex.StackTrace)
        End Try
    End Try
End Sub
4

0 回答 0