我最近没有上学,作为程序员开始了我的第一份工作。当我们的应用程序超时计时器关闭应用程序时,我们有一个用户报告的错误。我很确定我已经缩小了它,但我很好奇为什么原来的程序员会这样做,如果它是良好的编码实践,如果是这样,我很好奇,如果有人有办法处理这个。我们收到一个关闭后系统错误,因为它发生在主窗体关闭后,所以我们没有得到任何异常日志输入。
timeoutTimer_tick处理程序的关闭功能执行以下操作:
For iCount As Int16 = Application.OpenForms.Count - 1 To 0 Step -1
Try
Application.OpenForms(iCount).Close()
Catch
End Try
Next
Try
Application.Exit()
Catch ex As Exception
End Try
设置程序时,应用程序属性在主窗体关闭时关闭(不是所有打开的窗体都关闭)。这让我想知道为什么我们循环遍历每个表单并单独关闭它们,然后调用Application.Exit()
我很确定我们的错误是因为所有打开表单关闭后的Application.Exit调用。它没有看到主窗体,因为它在循环期间关闭,并抛出错误。我觉得我们应该使用其中一种,但不是两种。
任何意见或建议?哪个更好,或者更好(或者这个代码应该没有错误,我只是错了)。
由于
答案 0 :(得分:3)
在WinForms中,您有一个关机模式设置(项目属性>应用程序选项卡)
这允许您指定When startup form closes
或When last form closes
所以逻辑上你不应该需要Application.Exit
。如果你这样做,那么你需要处理的内存中还有一些其他的对象(在线程/后台工作者等上启动的东西)
所以如果您有启动表单设置:
[StartupFormName].Close
或者如果您有最后一个表单设置:
Do While My.Application.OpenForms.Count > 0
My.Application.OpenForms(0).Close()
Loop