我們在我們的應用程序Calculate
中有一個長(ish)操作,需要大約5秒鐘才能完成。 This post與我所做的基本相同,但只考慮完成的線程。任何觸發Calculate
的應該會終止任何正在運行的calc,然後重新啓動它。它似乎,基於this one等職位,ThreadPool
可以解決這個問題,但可能不是這些一次性案件的適當解決方案。爲了重新開始操作,正確的殺死線程中間線程的方法?
所以我的問題是如何正確處置「舊的」,如果它仍然是。我目前在做...
If CalcThread IsNot Nothing Then
CalcThread.Abort()
CalcThread = Nothing
End If
If CalcThread Is Nothing Then 'one assumes this will always be true
CalcThread = New Threading.Thread(AddressOf InternalCalculate)
CalcThread.IsBackground = True
End If
CalcThread.Start()
這出現工作,但這是正確的解決?
更新:鑑於我的用例是有隻有這些線程的單一一個,正如克里斯低於指出,中止可能不會做,馬上,我應該使用跨越的膽量的SyncLock Calculate
?
這是一篇關於Thread.Abort邪惡的好文章https://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation – FloatingKiwi
我已經閱讀過那篇文章,但這不是一個考慮因素這裏是因爲沒有共享數據或其他任何將被公開的內容。我想我真正的問題是「我可以將線程設置爲Nothing並繼續」? –