我有一个巨大的VB6遗留程序,我刚刚转换为VB.net。 主窗体显示在屏幕上,我在进入Windows消息循环之前成功地在最后一个可执行行上打印注释。
然后程序死掉(所有窗口都消失了),没有任何错误的迹象。
当程序中止时,我无法确定正在执行的代码,并且会很感激。
我在Visual Studio 2008 Professional中运行(因为代码刚从VB6转换而来),使用调试器。
我在每个timer_Tick处理程序和每个form_Activated处理程序中添加了一个方法调用作为第一行。我也在许多主要功能中做同样的调用。在我调用的子行的第一行中设置了一个断点...并且在消息循环开始后它没有被点击。
我试图查看所有Windows消息,但我不熟悉Spy ++工具,并且完全被消息所淹没。我知道我可以限制到一个特定的窗口,通过我的程序打开许多窗口,它可能是一个新的试图打开导致失败。
如果我没有得到其他解决方案,我可以使用Spy ++进一步研究,但我真的很想得到其他关于找到位置的建议。
感谢。
答案 0 :(得分:2)
尝试在Visual Studio调试器中启用所有异常。从DEBUG菜单中,选择Exceptions并选中Thrown下的所有框。 (稍后您可以使用“全部重置”恢复为默认设置。)这可能会暴露许多异常处理,您可以忽略这些异常,但也可能导致根本问题。
答案 1 :(得分:1)
没有代码,这是猜测,但它会与您描述的内容相匹配。当应用从Sub Main
开始时,您的代码必须启动消息泵 - 它不会自动发生:
Public Sub Main()
...
' same as `Enable XP Visual Styles in App settings
Application.EnableVisualStyles()
...
' last line
Application.Run(New MainForm())
End Sub
如果要使用视觉样式,则需要在引用任何表单或控件之前启用它们。
消息泵通过Application.Run
启动。如果您只是显示您的起始表单(和/或其他内容),则应用程序将在Sub Main
终止时终止,因为没有应用消息泵。