如何在C#中立即杀死线程
本文关键字:线程 | 更新日期: 2023-09-27 18:28:14
我正在使用线程从互联网上下载一些东西。我的线程方法中没有任何循环。我使用的是StreamReader.ReadToEnd()
方法,所以当我的线程正在下载一些大的东西时,我想停止这个线程。最好不使用Thread.Artrt()方法。有可能给GC线程清理,或者完成这个吗?
不要执行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
是否为真