none
多執行緒關閉問題?? RRS feed

  • 問題

  • 請問各位:
    我的程式是使用VS2008開發的Winform,
    每次在執行程式後,把form關閉後發現VS並沒有跳回編譯模式
    從工作管理員看到原來是程式內有些執行緒沒有關閉,
    由於我的程式有包含其他人寫的專案在內,

    有個問題想請問各位先進,
    threadstatus如果是running的情況下,可以直接以thread.abort中止這thread嗎?
    還是一定要為stop狀態??

       以下是我終止thread的寫法,請各位指教一下看看有沒有更好的寫法 麻煩了 謝謝

    int iLoopCnt2 = 0;
                if (th_UnloaderPb2Sensor != null)
                {
                    while (th_UnloaderPb2Sensor.ThreadState.ToString().Equals("Running"))
                    {
                        th_UnloaderPb2Sensor.Join(100);
                        if (iLoopCnt2++ > 3)
                            break;//避免thread無法關閉
                    }
                    th_UnloaderPb2Sensor.Abort();
                }

      

    2009年8月7日 上午 04:50

解答

所有回覆

  • Jude13:
        你是用 Thread.Start()方法啟動執行緒的嗎?
        可以將Thread.IsBackground屬性設為true , 這樣應該就會自動關閉了
        如果你用Thread.Abort()方法, 務必要攔截其ThreadAbortException
        請參考MSDN文件庫
        [Thread.IsBackground 屬性 ]
        [Thread.Abort 方法 ]
        [ThreadAbortException 類別 ]
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年8月7日 上午 04:59
    版主
  • to Bill你好:
      
        請問也就是我將Thread.IsBackground= true;後
    我將程式關閉後,thread就會自動關閉了嗎??

    謝謝
    2009年8月7日 上午 05:28
  • Hi,

    這問題其實可以自己先試試看
    而且Bill大附的MSDN有提到
    執行緒不是背景執行緒就是前景執行緒。背景執行緒和前景執行緒相同,唯一差別在於背景執行緒不會防止處理序終止。一旦終止屬於處理序的所有前景執行緒之後,Common Language Runtime 就會結束處理序。剩下的所有背景執行緒則會在尚未完成之前全部停止

    http://www.dotblogs.com.tw/larrynung/
    2009年8月7日 上午 05:37
  • 我了解了 感謝各位

    2009年8月7日 上午 05:43
  • to Bill你好:
      
        請問也就是我將Thread.IsBackground= true;後
    我將程式關閉後,thread就會自動關閉了嗎??

    謝謝

          沒有意外是這樣沒錯

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年8月7日 上午 05:53
    版主