2012-03-18 114 views
3

我正在使用線程從互聯網下載東西。 我的線程方法中沒有任何循環。我使用的是StreamReader.ReadToEnd()方法,所以 當我的線程正在下載一些大的東西時,我想停止這個線程。最好不使用Thread.Abort()方法。 是否有可能給GC線程清理,或完成此?如何在C#中立即殺死線程

回答

12

不要做ReadToEnd,而是創建一個循環並一次讀取X個字符(或者每次用ReadLine讀取一行)。在循環內檢查是否設置了AutoResetEvent(使用.WaitOne(0)),如果是,則退出循環。

當您想停止下載時,在其他線程中設置重置事件(使用Set)。

+0

+1。讀取結束非常糟糕 - 僞造無中止,您可能還會使用大量的內存,否則可能無法分配啓動(64或128k緩衝區可能就足夠了)。 – TomTom 2012-03-18 11:55:20

+1

使用StreamReader不會讀取X字節。用ReadLine()替換這個想法 – 2012-03-18 14:07:45

0

喬治·達克特說什麼,但你可以使用.NET 4中Task類啓動線程/異步任務,並通過在CancellationToken和循環檢查,如果IsCancellationRequested =真