看板 C_Sharp 關於我們 聯絡資訊
※ 引述《proach (p.roach)》之銘言: : ※ 引述《powertodream (The Beginning)》之銘言: : sorry, 順便請教類似的問題。 : 我在 RS232接收程式中,用 delegate來接收資訊,每次收到新資訊, : 就另外發出一個 delegate去解封包,繪圖,封包內容計算時間有點長, : 也許同時有兩三個 delegate發出去了同時在執行。因為我要結束程式時, : 都會出現錯誤訊息,必須預先把 serialPort關閉,等個100ms, : 才能安全關閉沒有錯誤。 : 請問我在 Form_Close時,是否有方法可以將所有執行中的 delegat : 都關閉之,或是將任何其他 thread都關閉的方法? 當你關閉 Form 的時候 thread 依然還在執行 可是 Form 卻已經把一些物件釋放掉了 此時如果 thread 存取到那些物件 錯誤就會跑出來跟你 say hello !! 照你提供的資訊來看 thread 中執行的 method 會在有限步驟中結束 既然會結束,那就只需要讓 Form 等它一下就好了 首先在 class hello 宣告 private object form; public hello(object form) { this.form = form; } 接著修改 add() public void add() { Monitor.TryEnter(form); ... Monitor.Exit(form); } 使用 Thread new Thread(new ThreadStart(new hello(this).add)).Start(); 最後在 Form_Close 中加入 this.Visible = false; while (!Monitor.TryEnter(this)) Application.DoEvents(); 表單隱藏起來眼不見為淨 等 thread 跑完表單就會真正關閉了 試看看吧 ^.< -- 程式設計師的四不一沒有: 操不死、罵不退、窮不怕、加班不停、沒有前途 程式設計師的工作內容: 錢少、事多、離家遠 位低、權輕、責任重 睡覺睡到做惡夢、哈錢哈到腦抽筋 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.73.248