从 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
但是一旦显示表单,我有两个相当烦人的问题:
- 如果某件事需要很长时间并且我点击了 "pause",我将转到
frmConvert.ShowDialog()
而不是当时正在执行的实际行。
- 如果发生未处理的异常,我不会收到任何错误消息,调试器不会出现,控制权从
frmConvert.ShowDialog()
返回,我会看到弹出窗口 "You are here!"。
因此,我完全不可能调试正在发生的事情。
我尝试将 frmConvert.ShowDialog()
替换为:
Dim main As New frmConvert
main.ShowDialog()
但这也没有用。
调用此表单的正确方法是什么才能显示它,但一切都如我所料?
使用 Application.Run(frmConvert)
而不是 frmConvert.ShowDialog()
。这是从 sub main 调用表单的 "correct" 方法。
我有一些代码在程序启动时在模块中运行,执行一些操作,然后(视情况而定)显示用于进一步交互的表单。
我这样做是因为在几个有效的场景中,程序可能会在没有显示表单的情况下开始和结束。
代码看起来有点像这样:
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
但是一旦显示表单,我有两个相当烦人的问题:
- 如果某件事需要很长时间并且我点击了 "pause",我将转到
frmConvert.ShowDialog()
而不是当时正在执行的实际行。 - 如果发生未处理的异常,我不会收到任何错误消息,调试器不会出现,控制权从
frmConvert.ShowDialog()
返回,我会看到弹出窗口 "You are here!"。
因此,我完全不可能调试正在发生的事情。
我尝试将 frmConvert.ShowDialog()
替换为:
Dim main As New frmConvert
main.ShowDialog()
但这也没有用。
调用此表单的正确方法是什么才能显示它,但一切都如我所料?
使用 Application.Run(frmConvert)
而不是 frmConvert.ShowDialog()
。这是从 sub main 调用表单的 "correct" 方法。