- 浏览: 739776 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (1081)
- [网站分类]1.首页原创精华.NET区(包含架构设计、设计模式)(对首页文章的要求:原创、高质量、经过认真思考并精心写作) (0)
- [网站分类]2..NET新手区(用于发表不合适发表在首页的.NET技术文章,包括小经验、小技巧) (1)
- [网站分类]3.非技术区(技术之外的文章,但不要涉及任何政治内容) (0)
- [网站分类]4.其他技术区 (0)
- [网站分类]5.企业信息化 (0)
- [网站分类]6.读书心得区(技术书籍阅读心得、书籍推荐) (0)
- [网站分类]7.提问区(.NET技术方面的提问) (2)
- [网站分类]8.技术转载区(.NET技术文章转载, 请注明原文出处) (0)
- [网站分类]9.求职招聘区(个人求职、企业招聘) (0)
- [网站分类]Dottext区 (0)
- [网站分类]GIS技术 (0)
- [网站分类]IT英才专区(IT职场交流) (0)
- [网站分类]SharePoint (0)
- [网站分类]博客园.NET俱乐部(俱乐部组织与活动方面的文章) (0)
- [网站分类]软件发布区(发布自己开发的代码、软件) (0)
- [网站分类]网站管理区(网站管理方面的疑问、建议、意见, 寻求管理员帮助) (0)
- [网站分类]业界新闻 (1)
- 技术 (1)
- [随笔分类]生活感悟 (10)
- [随笔分类]C# (30)
- [随笔分类]AjaxPro教程 (3)
- [发布至博客园首页] (5)
- [随笔分类]简历 (0)
- [随笔分类]Linux (2)
- [随笔分类]技术聚会 (2)
- [随笔分类]ORM (1)
- [随笔分类]php (1)
- [随笔分类]创业 (1)
- [随笔分类]奇技淫巧 (1)
- [随笔分类]计划 (1)
- [随笔分类]架构&分层 (1)
- [随笔分类]整合行销 (1)
- [随笔分类]mac (1)
- [网站分类].NET新手区 (45)
- [网站分类]非技术区 (5)
- [网站分类]招聘区 (0)
- [随笔分类]单元测试 (1)
- [网站分类]其他技术区 (3)
- [网站分类]代码与软件发布 (6)
- [网站分类]提问区 (24)
- [随笔分类]ASP.NET (2)
- [随笔分类]FAQ (12)
- [随笔分类]开发人员工具 (1)
- [随笔分类]朗志轻量级项目管理解决方案 (1)
- [网站分类]读书区 (1)
最新评论
-
天使建站:
写和乱七八糟的 不知道从哪复制过来的 还是看这里吧j ...
jquery数组 -
hyn450:
你好,我最近也想了解一下竞争情报。不知道能不能交流一下呢 ?
最近的工作 -
lattimore:
这个连接打不开了阿!
使用vnc连ubuntu desktop -
MZhangShao:
奉劝你一句,以后在Ubuntu 用apt-get安装成功的软件 ...
关于xrdp的安装设置 -
f002489:
strftime
python下datetime类型的转换
在自制线程池的过程中遇到这样一个情景:需要中断一个可能是正在执行的任务,这个任务也可能任务队列中,由于是线程池,任务执行完后线程不是消失的而是继续等待接收下一个任务的,我使用的是Thread.Suspend来暂停线程当线程完成一项任务后,这时候如果使用Thread.Abort来中断这个ThreadState为Suspended的线程是会报错的。
以下代码重现了我的错误


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ThreadPoolTest
{
class Class5
{
static void Main(string[] args)
{
Thread thd=new Thread(new ThreadStart(test));
thd.Start();
Thread.Sleep(10000);
thd.Abort();
Console.WriteLine();
Console.ReadLine();
}
private static void test()
{
Console.WriteLine("aa");
Thread.CurrentThread.Suspend();
Console.WriteLine("aa");
}
}
}
google许久,发现一篇英文http://www.code-magazine.com/article.aspx?quickid=0309071&page=4描述的非常清楚,其中有如下一段:
If Abort() is called before the thread is started, .NET will never start the thread once Thread.Start() is called. If Thread.Abort() is called while the thread is blocked (either by calling Sleep(), or Join(), or if the thread is waiting on one of the .NET synchronization objects), .NET unblocks the thread and throws ThreadAbortException in it. However, you cannot call Abort() on a suspended thread. Doing so will result on the calling side with an exception of type ThreadStateException, with the error message "Thread is suspended; attempting to abort." In addition, .NET will terminate the suspended thread without letting it handle the exception
就是说线程的状态是Suspended的时候,是不能使用Thread.Abort来中止的,那我们的情况怎么处理呢,我们换了一个思路,既然线程的状态已经是 Suspended了为什么我们还要Abort它呢,将它再次放入线程池为后续任务工作不是更好吗?
于是加一个条件判断
if(Thread.ThreadState==ThreadState.Suspended):
pass
这样就ok了
发表评论
-
关于分层架构中的业务实体层的使用一直不太清楚,可否指点一下?
2007-03-23 09:10 681我知道业务逻辑层又可细分为三个层次,分别是业务外观层业务规则层 ... -
xml反串行化
2007-07-02 17:23 7441using System; 2using Syste ... -
WriteXmlSchema(xsdFileName)和GetXmlSchema()输出的内容的差异
2007-07-04 19:00 907利用DataSet.ReadXml载入一个xml文件,再使用G ... -
对websharp中aspect的改进(待续)
2007-11-17 14:27 723缘起 为了在我的《朗志轻量级项目管理解决方案》项目中应用 ... -
WebSharp Aspect改进(续2)
2007-11-19 21:39 705接着上次在《朗志轻量级项目管理解决方案》中对Aspec ... -
TreeView(树形控件)中常用到的属性和事件
2007-11-19 22:22 13031.TreeView(树形控件) ... -
有没有适合的的面向对象的查询语言(Object Query Language)
2007-11-28 10:15 771在我做《朗志轻量级项目管理解决方案》的过程中,我希望 ... -
问题解答集
2007-11-29 18:11 4501 如何在源代码的目录下添加一个测试文件 ... -
FckEditor自定义按钮
2007-11-29 18:35 843目录 FckEditor自定义按钮 1 目录 ... -
GhstDoc2.1.1使用手册
2007-11-29 18:39 737目录 GhstDoc2.1.1使用手册 1 ... -
Log4net使用说明
2007-11-29 18:44 799Log4net使用说明 1 修改历史纪录 ... -
MySQLHelper类使用说明
2007-11-29 18:46 1336目录 MySQLHelper类使用说明 1 目录 ... -
NDoc1.3.1使用手册
2007-11-29 18:47 781目录 NDoc1.3.1使用手册 1 目录 ... -
程序中操作Word
2007-11-29 18:52 740目录 程序中操作Word 1 目录 2 ... -
利用SMTP服务发送电子邮件
2007-11-29 18:58 1360目录 利用SMTP服务发送电子邮件 1 目录 ... -
程序中操作Excel
2007-11-29 18:59 654目录 程序中操作Excel 1 目录 ... -
访问被拒绝:“AjaxPro”的解决方案
2007-11-29 19:01 580目录 访问被拒绝:&qu ... -
sqlserver的版本号
2008-02-27 21:01 829当你安装了sqlserver 2005之后你就可以使用sqls ... -
在安装有VS2008beta2版本的机子上使用vs2005进行部署出现问题的解决方法
2008-02-27 21:13 691我知道,2008rtm发布已经很久了,不巧的是同学在我的机子上 ... -
忙话codesmith
2008-07-28 15:01 876为什么不是闲话,因为我很忙,项目中新问题是接连不断,上一篇讲到 ...
相关推荐
- **挂起(Suspended)**:线程被挂起,无法执行,但内存占用仍然存在。 - **终止(Stopped/Terminated)**:线程执行完成或被`Abort()`方法强制停止。 2. **Thread.IsAlive属性** `Thread.IsAlive`属性返回一个...
A simple semi-analytical model to estimate total suspended sediment matter (3S) was established for estimating TSM concentrations in Changjiang River Estuary. The results indicate that 3S model with ...
The concept of a coroutine is one of the...“the execution of a coroutine is suspended as control leaves it, only to carry on where it left off when control re-enters the coroutine at some later stage”.
施耐德-Medium power busbar trunking Canalis KS(100 to 800A) Cataloguepdf,施耐德-Medium power busbar trunking Canalis KS(100 to 800A) Catalogue Components for changing direction 1、Edgewise elbow. One ...
The vision is “To produce the best UNIX-like operating system package possible, with due respect to the original software tools ideology as well as usability, performance and stability.” The ...
if (thread1.ThreadState == ThreadState.Suspended) { thread1.Resume(); } ``` #### 示例代码解析 下面给出一个简单的多线程示例程序,该程序展示了如何在C#中创建并启动一个新的线程: ```csharp using ...
if (thread.ThreadState == ThreadState.Suspended) { thread.Resume(); } ``` 6. **线程示例** 以下是一个简单的多线程示例,它创建了一个新的线程并运行`ThreadProc`方法: ```csharp using System; ...
Account Suspended(解决方案).md
集合了 所有的 Unix命令大全 ...telnet 192.168.0.23 自己帐号 sd08077-you0 ftp工具 192.168.0.202 tools-toolss ... 各个 shell 可互相切换 ksh:$ sh:$ csh:guangzhou% bash:bash-3.00$ ... 命令和参数之间必需用空格隔...
- **线程的状态**: 例如 `ThreadState` 属性可以用来检查线程的当前状态,如是否正在运行(`Running`)、是否已被暂停(`Suspended`)等。 - **线程的控制**: `Thread` 类提供了多种方法来控制线程的行为,比如 `...
5. **线程终止**:`Thread.Abort()`方法可以强制结束一个线程,但这可能会导致未捕获的异常,因此通常不推荐。更安全的方式是通过设置某个标志,让线程自己检查并优雅地结束。 6. **线程状态管理**:线程有多种状态...
线程结束通常由`Thread.Join`、`Abort`或自然完成工作。`Join`等待线程结束,`Abort`强制终止,但应谨慎使用,因为它可能导致资源泄露和不可预测的行为。 总之,理解并熟练运用.NET Framework的多线程编程技术,能...
A kind of novel fiber, comprising two fiber cores which are suspended in air inside the outer cladding via a central thin membrane, is proposed for optical switching application. When a hydrostatic ...
而线程从运行状态(Running)变为停止状态(Stopped)可能是线程执行完毕或被`Thread.Abort`方法中断。线程在遇到同步锁或等待I/O操作时,会从运行状态转变为阻塞(Blocked)或等待-休眠-联接(WaitSleepJoin)状态...
7. **ThreadState**:表示线程的状态,如`Aborted`、`Running`、`Stopped`、`Suspended`等,这些状态可以帮助开发者监控和控制线程的行为。 在WinForm应用中,直接在新线程中修改UI组件的属性是不允许的,因为这会...
本文将详细介绍如何在 VMware 中处理虚拟机从挂起(suspended)状态无法正常恢复的问题,并将其强制转换为关闭(power off)状态。 挂起状态,也称为暂停状态,是 VMware 提供的一种功能,使用户能够暂时停止虚拟机...
ThreadState 在各种情况下的可能取值包括:Aborted、AbortRequested、Background、Running、Stopped、StopRequested、Suspended、SuspendRequested、Unstarted、WaitSleepJoin 等。 在 WinForm 中使用线程时,需要...