2013-05-29 30 views
2

我最近失學了,擔任了程序員的第一份工作。當我們的應用程序超時計時器關閉應用程序時,我們有一個用戶報告的錯誤。我很確定我已經縮小了它的範圍,但是很好奇爲什麼原始程序員會這樣做,如果這是很好的代碼實踐,如果有的話,我很好奇,如果有人有辦法處理這個問題。我們得到一個後關閉系統錯誤,因爲它在主窗體關閉後發生,所以我們沒有得到任何異常日誌輸入。form.close和application.exit之間的區別

的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調用。它沒有看到主窗體,因爲它在循環過程中被關閉,並引發錯誤。我覺得我們應該使用一種或另一種,但不是兩種。

任何意見或建議?哪個更好,或者更好(或者應該這個代碼沒有錯誤地工作,而且我錯了)。

感謝

回答

3

在的WinForms,你有一個關機模式設置(項目屬性>應用程序選項卡)

這允許您指定When startup form closesWhen last form closes

所以邏輯,你不應該需要Application.Exit。如果你那麼在內存中還有一些其他對象需要處理(在線程/後臺工作者等開始的東西)

所以如果喲u有啓動窗體設置:

[StartupFormName].Close 

,或者如果你有最後的形式設置:

Do While My.Application.OpenForms.Count > 0 
    My.Application.OpenForms(0).Close() 
Loop