**编辑
在高级编译选项中取消选中“启用优化”不会导致此错误。
去掉代码中的 For 循环也不会导致这个问题。
将 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