台灣最大程式設計社群網站
線上人數
1053
 
會員總數:244578
討論主題:188713
歡迎您免費加入會員
討論區列表 >> VB.NET >> 該如何正確的結束程式
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
該如何正確的結束程式
價值 : 100 QP  點閱數:522 回應數:11

樓主

city
初學者
130 40
1425 224
發送站內信

各位前輩們好:

請問[函式]要如何結束[主程式]呢?

例如:


Class1的SetFormTitle方法 要把整個程式關閉

各位都是如何做呢?

1.End

2.Application.Exit()

3.Environment.Exit(0)

4.其它

謝謝~~

搜尋相關Tags的文章: [ 副程式 ] , [ 函式 ] , [ 方法 ] , [ 正確 ] , [ 結束程式 ] ,
本篇文章發表於2019-01-06 12:03
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

香帥
檢舉此回應
通常都這麼做

本篇文章回覆於2019-01-06 22:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

誰是誰
檢舉此回應
要看應用場景,沒有甚麼誰特別正確的問題。你的敘述中 1. End 和 3. Enviroment.Exit(0) 是同樣意義的,由於 End 指令是 VB 特有,以 VB 和 C# 的通論來看,我把討論對象放在 Application.Exit 和 Environment.Exit(0)

(1) Application.Exit 的主要應用場景是 Windows Forms Application, 所以就這個框架來討論。

(2) Environment.Exit(0) 的作用是直接殺掉 process,如果你的程式是設計成 "直接關閉就好" , 那 Environment.Exit(0)超好用,因為它直接關閉進程;也就是說,如果你使用的是 Environment.Exit(0),在呼叫前得要小心注意資源關閉的問題,也就是說你得自己寫程式處理這些事。

(3) Application.Exit 的做法有些許不同,他會先通知所有的 message loops 準備關閉,接著關閉所有已經開啟的表單,接著退出執行緒。這作法較需要注意的點是在多執行緒的時候,若是其他執行緒沒有設定為"背景執行緒" 的時候,如果沒有先處理那些還在運行中的執行緒,就會造成當前的執行緒關閉後,還有執行緒繼續在運作的問題。

(4) 假設一個 Windows Forms Application
他有兩個 Form , Form1 與 Form2 , 主要的啟動是 Form1

Form1 有三個 Button 依序的作用是 (button1) 顯示一個 Form2 , (button2) 使用 Environment.Exit(0) 離開, (button33) 使用 Application.Exit 離開
Form2 FormClosing event 和 FormClosed event 分別被委派了兩個方法 Form_Closing 和 Form_Closed

實驗一
啟動程式, 按下 Form1 的 button1 顯示 Form2, 按下 Form1 的 button2 關閉程式。這時 Form2 的 Form_Closing 和 Form_Closed method 都不會執行。

實驗二
啟動程式, 按下 Form1 的 button1 顯示 Form2, 按下 Form1 的 button3 關閉程式。這時 Form2 的 Form_Closing 和 Form_Closed method 都會執行。

這樣看得出差別了吧。

本篇文章回覆於2019-01-07 01:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

city
檢舉此回應
就我實際上遇到的經驗:

[End]
有時候用End會出現錯誤
大部分的時候 用End是可行的
可是有時候 用End會出現錯誤
(如果是直接執行exe檔 不會顯示出現錯誤 會直接關閉程式)
(如果是在Visual Studio環境按F5執行 會顯示出現錯誤訊息 不會關閉程式 要自己按停止偵錯)


[Application.Exit]
Application.Exit有時候會出現錯誤


[Environment.Exit(0)]
有時候Function裡面 最後一行如果是Environment.Exit(0) 會顯示沒有回傳值
如果最後一行是End 就不會顯示沒有回傳值

所以我猜想End是否跟Environment.Exit(0)有所差異?


網路上還有Application.ExitThread
不過這個我沒真正使用過
測試一下 好像沒什麼效果?


就我個人的經驗:
End
Application.Exit
Environment.Exit(0)
單獨使用好像都不是很理想?

要復合使用好像比較好?

個人目前是用:Application.Exit+End
目前好像沒遇過問題

以上是個人經驗 如有錯誤請指正

不知各位前輩大大們怎麼看?

謝謝~~
本篇文章回覆於2019-01-07 12:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

誰是誰
檢舉此回應
你的論調常常都奇特到令人讚嘆。
一個程式在關閉的時候若是發生 exception,首要的工作應該是找出 exception 的成因,並且使用正確的方式對應解決。
而你的想法是關了就好,以這種眼不見為淨的觀點,那不如直接關閉電腦的電源還乾脆點。
本篇文章回覆於2019-01-07 17:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

誰是誰
檢舉此回應
Visual Basic 的 End 指令編譯剝開兩層就是


一般而言,除非你有去設定 Environment.ExitCode,否則那個值就是 0
本篇文章回覆於2019-01-07 23:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

city
檢舉此回應
To:誰是誰

我一般會用關閉程式大概是兩個地方
一個是[副程式][函式][方法]的參數 如果輸入錯誤的參數就關閉程式
一個是Try Catch

大大說的[關閉程式若是發生exception 首要的工作應該是找出exception的成因]
這點以後我倒是可以注意一下


爬一下網路
關閉程式+退出程序 似乎還蠻複雜的
網路上大約有幾個函式:
End
Application.Exit()
Application.ExitThread()
Environment.Exit(Environment.ExitCode)
Process.GetCurrentProcess.Kill()
...(不知道還有沒有其他的)

微軟不知道是不是有把關閉程式+退出程序包在這些函式裡面
使用者只要會用這些函式就好 不須要知道程式是如何被關閉 如何退出程序?
本篇文章回覆於2019-01-08 00:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

誰是誰
檢舉此回應
微軟有寫文件,文件就有說明他們大概的使用方式。我看你發問的脈絡,大概感覺出來你是沒花過甚麼時間去看過原廠文件。

輸入錯誤的參數就關閉:如果是系統登入的部分還勉強可以接受,如果一般的操作輸入錯了就會關程式,大概會被客戶幹翻吧。

Catch 到 Exception 就關閉,基本上要看這個 exception 的本質是甚麼。我相信大部分的狀況是處理/記錄 exception,應該也只有少數情境是遇到 exception 關閉程式的。

當然,如果你的使用者不介意你的程式常常自己就莫名關閉的話,愛怎麼關就怎麼關也無妨。
本篇文章回覆於2019-01-08 00:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

city
檢舉此回應
To:誰是誰

(一)
請問大大是在什麼情況下會用到:
Application.Exit()
Environment.Exit(0)

(二)
寫在哪?
Form Closing事件方法裡面?

謝謝~~
本篇文章回覆於2019-01-09 11:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

誰是誰
檢舉此回應
(1) 我通常不做強迫退出,如果會用到,那我在二樓已經解釋得很清楚了。
(2) 施主,為什麼你會想到要寫在 Form.Closing 的委派函式呢 ?
本篇文章回覆於2019-01-09 12:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

city
檢舉此回應
To:誰是誰

微軟會有Application.Exit() Environment.Exit(0) 想必是有它的道理
也想必是會有用到它的情境

只是我不了解大家會用到Application.Exit() Environment.Exit(0)的情境是在什麼時候

======================================================================================

目前我個人想法是程式出錯時使用
參數出現錯誤 或是程式碼運行出現錯誤使用

======================================================================================

參數出現錯誤就關閉程式
的確是我個人使用的程式 非給別人使用的程式
就如同大大說的 別人不會接受參數錯誤就關閉的程式

而我也不可能會亂丟參數給自己寫的程式
所以其實就是種"防呆" "多個保險"的功能
事實上也是可以不用寫參數除錯的程式碼

就如同我之前的發問[有人會在方法裡面加上除錯嗎?]
[小羊窒息]大大所說的[寫給自己用的函數, 沒有在除錯的]

當然 是因為是自己使用的程式 所以我會加上除錯+出錯就關閉程式
如果是寫給別人的程式 可能就要修改成 出錯就顯示錯誤訊息 但不會關閉程式之類的...

======================================================================================

[Catch到Exception就關閉]
基本上也是種"保險"的功能
事實上 程式碼根本不應該會被Catch到Exception
會被Catch到Exception代表程式碼有錯誤 應該要檢查程式碼
一般人應該無法忍受自己寫的程式碼有bug吧?

所以在Try Catch裡面寫上Application.Exit() Environment.Exit(0) 也只是多個保險的意思

也是讓出錯的程式自己關閉 免得卡在那邊 還要自己在工作管理員裡面手動關閉程式

======================================================================================

我沒有在Form Closing事件方法裡面寫過Application.Exit() Environment.Exit(0)

是看到大大2樓有提到Form Closing
就想說:如果在Form Closing裡面 加上Application.Exit() Environment.Exit(0)
會不會就等於請微軟幫我們更不會出錯的關閉程式

哈哈
本篇文章回覆於2019-01-09 13:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

誰是誰
檢舉此回應
Catch Exception 是有存在必要的,端視程式碼所應用的場景決定其必要性。
本篇文章回覆於2019-01-10 05:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.