2

我最近离开学校,做我的第一份程序员工作。当我们的应用程序超时计时器关闭应用程序时,我们有一个用户报告的错误。我很确定我已经缩小了范围,但是很好奇为什么最初的程序员会这样做,如果这是良好的编码实践,如果是这样,我很好奇是否有人有办法处理这个问题。我们收到关闭后系统错误,因为它发生在主窗体关闭后,所以我们没有收到任何异常日志输入。

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 在所有打开的表单都关闭后调用。它看不到主窗体,因为它在循环期间关闭,并引发错误。我觉得我们应该使用其中一个,但不能同时使用两者。

有什么意见或建议吗?哪个更好,或者更好(或者这个代码应该没有错误地工作,我完全错了)。

谢谢

4

1 回答 1

3

在 WinForms 中,您有一个关闭模式设置(项目属性>应用程序选项卡)

这允许您指定When startup form closesWhen last form closes

所以逻辑上你不应该需要Application.Exit。如果你这样做了,那么你需要处理内存中的一些其他对象(在线程/后台工作人员等开始的东西)

所以如果你有启动表单设置:

[StartupFormName].Close

或者如果您有最后一个表单设置:

Do While My.Application.OpenForms.Count > 0
    My.Application.OpenForms(0).Close()
Loop
于 2013-05-29T13:30:27.073 回答