从 vb.net 中的模块调用表单会导致调试问题

Calling a form from a module in vb.net causes debugging issues

我有一些代码在程序启动时在模块中运行,执行一些操作,然后(视情况而定)显示用于进一步交互的表单。

我这样做是因为在几个有效的场景中,程序可能会在没有显示表单的情况下开始和结束。

代码看起来有点像这样:

Public Sub Main()

    Call Create_Application_Data_Folder()

    ' Parse the command line arguments for all the videos to convert
    Dim totalFiles As Integer = Parse_Command_Line_Args()
    If totalFiles = -1 Then End  ' No valid video files listed

    ' Confirm to the user
    If MsgBox("Would you like to convert these " & totalFiles & " files?", MsgBoxStyle.YesNo + MsgBoxStyle.Question, "Converter") = MsgBoxResult.No Then End

    ' Check if there isn't another process running
    Dim alreadyRunning as Boolean = Check_Already_Running()
    If alreadyRunning = True Then
        ' Add to existing queue to be run by other process
        Call Advise_Files_Added_To_Queue
        End
    End If

    ' Show conversion window and get converting
    frmConvert.ShowDialog()

    ' DEBUGGING: Display a pop-up here when form is closed
    MsgBox("You are here!")

End Sub

但是一旦显示表单,我有两个相当烦人的问题:

  1. 如果某件事需要很长时间并且我点击了 "pause",我将转到 frmConvert.ShowDialog() 而不是当时正在执行的实际行。
  2. 如果发生未处理的异常,我不会收到任何错误消息,调试器不会出现,控制权从 frmConvert.ShowDialog() 返回,我会看到弹出窗口 "You are here!"。

因此,我完全不可能调试正在发生的事情。

我尝试将 frmConvert.ShowDialog() 替换为:

Dim main As New frmConvert
main.ShowDialog()

但这也没有用。

调用此表单的正确方法是什么才能显示它,但一切都如我所料?

使用 Application.Run(frmConvert) 而不是 frmConvert.ShowDialog()。这是从 sub main 调用表单的 "correct" 方法。