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

时间:2015-01-13 18:40:54

标签: vb.net winforms visual-studio debugging

我有一些代码在程序启动时在模块中运行,执行许多操作,然后(根据具体情况)显示一个表单以便进一步交互。

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

代码看起来像这样:

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. 如果某事花了很长时间并且我点击“暂停”,我就会被带到frmConvert.ShowDialog()而不是当时正在执行的实际行。
  2. 如果发生未处理的异常,我没有收到错误消息,调试器没有显示,控件从frmConvert.ShowDialog()返回,我看到弹出窗口“你在这里!”。
  3. 因此,我完全无法调试正在发生的事情。

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

    Dim main As New frmConvert
    main.ShowDialog()
    

    但这也不起作用。

    调用此表单的正确方法是什么,以便显示但是一切都按照我的预期运行?

1 个答案:

答案 0 :(得分:1)

使用Application.Run(frmConvert)代替frmConvert.ShowDialog()。这是从子主档调用表单的“正确”方式。