如何在C#中立即杀死Thread

时间:2012-03-18 11:29:10

标签: c# multithreading

我正在使用线程从互联网上下载内容。 我的线程方法中没有任何循环。我正在使用StreamReader.ReadToEnd()方法,所以 当我的线程下载大的东西我想停止这个线程。最好没有Thread.Abort()方法。 是否可以给GC螺纹清洁,或完成这个?

3 个答案:

答案 0 :(得分:12)

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

如果要停止下载,请在其他线程中设置重置事件(使用Set)。

答案 1 :(得分:2)

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

new StreamReader(aStream).BaseStream.BeginRead()

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

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

Stop Stream.BeginRead()

答案 2 :(得分:0)

George Duckett说的是你可以使用.Net 4 Task类来启动线程/异步任务并传入CancellationToken并在循环中检查IsCancellationRequested = true < / p>