System.Threading.ThreadAbortException: 正在中止线程

mimangshamo 2012-02-23 04:59:30
现在遇到一个问题,问题的大概描述就是,我在子线程中执行抓页面的操作,但是主线程处理完后就会终止这个子线程,但是子线程这时候如果没完成,那么就会出现如题的异常,代码如下:

报错的行:PageHtml = sr.ReadToEnd();

用于子线程调用的对象(由于我需要传值和取返回值,所以就定义一个实体类)

public class PageTool
{
/// <summary>
/// 请求地址
/// </summary>
public string Url { get; set; }
/// <summary>
/// 超时时间(毫秒)
/// </summary>
public int TimeOut { get; set; }
/// <summary>
/// 页面内容
/// </summary>
public string PageHtml { get; set; }


public void GetPage()
{
WebResponse response1 = null;
Stream stream1 = null;
StreamReader sr = null;

try
{
WebRequest request1 = WebRequest.Create(Url);
request1.ContentType = "application/x-www-form-urlencoded";
request1.Timeout = TimeOut;
response1 = request1.GetResponse();
stream1 = response1.GetResponseStream();
sr = new StreamReader(stream1, System.Text.Encoding.UTF8);
PageHtml = sr.ReadToEnd();
}
catch (Exception exception2)
{
// 记录日志
}
finally
{
if (sr != null)
sr.Close();
if (stream1 != null)
stream1.Close();
if (response1 != null)
response1.Close();
}
}
}


主线程代码

......
public void GetPages()
{
Thread th = null;
try
{
PageTool tool = new PageTool();
tool.Url = "https://forum.csdn.net/PointForum/Forum/PostTopic.aspx";
tool.TimeOut = 6000;
th = new Thread(new ThreadStart(tool.GetPage));
th.Start();
}
catch(Exception ex)
{
// 记录日志
}
finally
{
if(th!=null)
th.Abort();

// 如果是主线程先完成,子线程没完成,终止子线程时红色位置会报错
// System.Threading.ThreadAbortException: 正在中止线程。
// 在 System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
// 在 System.IO.StreamReader.ReadBuffer()
// 在 System.IO.StreamReader.ReadToEnd()
}
}
......
...全文
613 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mimangshamo 2012-02-23
  • 打赏
  • 举报
回复
我这个情况特殊,理论上我是想要子线程的工作不影响主线程,也就是说,主线程想要去子线程的数据就取,不取的话子线程就不管他
tan598121925 2012-02-23
  • 打赏
  • 举报
回复
主线程不是等子线程处理完才终止吗

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧