如何在C#中立即杀死线程

本文关键字:线程 | 更新日期: 2023-09-27 18:28:14

我正在使用线程从互联网上下载一些东西。我的线程方法中没有任何循环。我使用的是StreamReader.ReadToEnd()方法,所以当我的线程正在下载一些大的东西时,我想停止这个线程。最好不使用Thread.Artrt()方法。有可能给GC线程清理,或者完成这个吗?

如何在C#中立即杀死线程

不要执行ReadToEnd,而是创建一个循环并一次读取X个字符(或者使用ReadLine一次读取一行)。在循环中检查是否设置了AutoResetEvent(使用.WaitOne(0)),如果设置了,则退出循环。

当您想停止下载时,在另一个线程中设置重置事件(使用Set)。

您可以使用BaseStream BeginRead()异步方法。您最好使用它,而不是生成自己的专用线程(这会消耗1MB的已提交内存)。异步方法使用I/O完成端口,因此效率更高。

new StreamReader(aStream).BaseStream.BeginRead()

以下是更多信息http://msdn.microsoft.com/en-us/library/system.io.stream.beginread.aspx

停止异步读取时的相关线程。

停止流.开始读取()

George Duckett说了什么,但您可以使用.Net 4 Task类来启动线程/异步任务,并传入CancellationToken和循环中检查IsCancellationRequested是否为真