我有一個簡單的UI,它有兩個按鈕「開始」和「停止」。當用戶點擊「開始」時,我必須執行冗長的操作,所以我啓動一個工作線程來保持UI響應。現在如果用戶點擊停止,我需要儘快停止操作。實現這個在操作過程中停止工作線程
一種方式是輔助線程函數檢查一個布爾BSTOP =假每一秒,如果用戶點擊停止,我們從停止按鈕處理程序中設置BSTOP爲true,將工作線程停止當前操作。
另一種方法是使用其句柄殺死線程。
有沒有更好的方法來做到這一點?
我有一個簡單的UI,它有兩個按鈕「開始」和「停止」。當用戶點擊「開始」時,我必須執行冗長的操作,所以我啓動一個工作線程來保持UI響應。現在如果用戶點擊停止,我需要儘快停止操作。實現這個在操作過程中停止工作線程
一種方式是輔助線程函數檢查一個布爾BSTOP =假每一秒,如果用戶點擊停止,我們從停止按鈕處理程序中設置BSTOP爲true,將工作線程停止當前操作。
另一種方法是使用其句柄殺死線程。
有沒有更好的方法來做到這一點?
您可以通過TPL查看新的取消功能。
http://msdn.microsoft.com/en-us/library/dd997396(v=vs.110).aspx
這取決於你的環境,@ Coder777。
通常,作業取消需要將作業編程爲接受取消請求並進行相應的清理以避免部分故障狀態。在很少的環境中,簡單地殺死線程是安全的(這些環境已經被專門編碼以有序地處理線程終止)。
如果作業是非阻塞的,可以在作業中的一個或多個階段檢查標誌以確定作業是否應該取消;並且,如果它被取消,優雅地終止工作,清理資源等。如果作業可以阻塞,例如在IO上,那麼你需要確保該塊是可中斷的並且異步通知它,或者允許該塊在檢查取消之後定期超時並恢復其塊。
見本在Java中如何完成下面的文章:不建議
How to stop a java thread gracefully? How to properly stop the Thread in Java? http://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousChannel.html
在S/W開發中處理這種情況的常見做法是什麼?任何環境,例如C#與WinForms或WPF。我不喜歡這兩種解決方案,有沒有更好的方法? – Coder777
方式二。誰知道你在循環中做什麼。如果它仍然是半完成的,你會得到很多的錯誤。循環,我的意思是你提到的冗長的操作 – mangusta
*哪個*語言/環境?確保這很容易反映在問題和標籤中。 – user2864740
@ user2864740,我的問題沒有綁定到語言。我只想知道最有名的做法。 – Coder777