Some people says that Thread.Abort is evil.But the following is what the msdn says.
http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx
using System;
using System.Threading;
using System.Security.Permissions;
public class ThreadWork {
public static void DoWork() {
try {
for(int i=0; i<100; i++) {
Console.WriteLine("Thread - working.");
Thread.Sleep(100);
}
}
catch(ThreadAbortException e) {
Console.WriteLine("Thread - caught ThreadAbortException - resetting.");
Console.WriteLine("Exception message: {0}", e.Message);
Thread.ResetAbort();
}
Console.WriteLine("Thread - still alive and working.");
Thread.Sleep(1000);
Console.WriteLine("Thread - finished working.");
}
}
class ThreadAbortTest {
public static void Main() {
ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
Thread myThread = new Thread(myThreadDelegate);
myThread.Start();
Thread.Sleep(100);
Console.WriteLine("Main - aborting my thread.");
myThread.Abort();
myThread.Join();
Console.WriteLine("Main ending.");
}
}
分享到:
相关推荐
总结来说,`Thread.IsAlive`是C#中用来检测线程状态的一个实用工具,它帮助开发者了解线程是否已经启动并正在运行,从而可以做出相应的控制决策。不过,考虑到线程调度的不确定性以及线程安全问题,正确地使用`...
本人利用Thread.Abort()与Thread.Interrupt()可以引起目标线程异常的特点,开发了一种不使用已过时的方法来变相从外部控制线程的挂起与恢复的技术,原理简单,方便理解。 相关技术参考:...
在C#中,每个应用程序都有一个默认的主线程(Main Thread),它是程序执行的起点。除了主线程之外,还可以创建多个子线程(Child Threads)来执行独立的任务。主线程与子线程之间存在紧密的联系: 1. **前台线程...
C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called. C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called.
通过跟踪发现,问题的根源在于使用了 Thread.Abort() 终止线程的执行。当在执行 webservice 的类型构造 static Webservice(){} 中,用户中断了程序的执行时,下次使用 webservice 的任何方法时,都会抛出 ...
在C#中,可以使用System.Threading命名空间中的Thread类来创建和管理线程。然而,直接操作Thread对象可能导致复杂的同步问题,因此.NET框架提供了更高级的异步编程模型,如Task类和async/await关键字。 在C#中,...
angular.http.abort 使用 angular 实现 http 请求中止和超时的示例。 如何开始: 安装 nodejs。 ( ) 安装依赖项 // npm install 在终端中输入 npm start 。 在浏览器中打开 。
Thread类提供了属性如Name来标识线程,以及方法如Join、Sleep和Abort来控制线程行为。 2. **BackgroundWorker组件**:这是一个用于在后台线程上执行操作的控件,适合处理长时间运行的任务,不会阻止用户界面的更新...
在C#中,线程控制方法主要包括Thread.Start()、Thread.Abort()、Thread.Suspend()和Thread.Resume()等。 1. Thread.Start():启动线程的执行,线程从开始执行到结束。 2. Thread.Abort():终止线程的执行,线程立即...
总的来说,`Thread.Join()`是C#多线程编程中一个强大的同步工具,它能帮助开发者控制线程的执行顺序,确保线程间操作的正确性。然而,过度使用或者不当使用`Join()`可能导致阻塞和性能问题,因此在设计多线程程序时...
th.Abort(); } private void Listen() { try { tcpl = new TcpListener(5656); tcpl.Start(); Console.WriteLine("started listening.."); while (listenerRun) { Socket s = tcpl.AcceptSocket(); //...
在使用U盘进行系统安装的过程中,遇到“Decompression error, Abort”的错误提示,这通常是由于两个主要问题导致的:U盘与计算机USB接口接触不良或者是U盘内存储的系统映像文件损坏。针对这些问题,我们可以采取以下...
通过`Thread.Start()`启动线程,`Thread.Abort()`可以尝试停止线程,但不推荐使用,因为它可能导致数据不一致和资源泄露。 3. **同步和互斥**:在多线程环境中,同步是确保数据一致性的重要手段。`Monitor`类提供了...
9. **线程间通信**:`Thread.Join`用于等待一个线程结束,`Thread.Interrupt`或`Thread.Abort`可以中断线程,`ManualResetEvent`和`AutoResetEvent`等事件信号提供线程间的通信。 10. **线程局部存储**:使用`...
`Thread`类提供了创建、管理和同步线程的方法,是C#编程中进行多线程操作的基础。在ASP.NET和C#应用程序中,理解并熟练使用`Thread`可以帮助开发者实现更高效的并发处理,提升程序性能。 1. **线程创建** 创建一个...
`Thread.ThreadState`属性可以获取线程当前的状态,而`Thread.Abort`方法可以强制终止线程,但应谨慎使用,因为它可能导致不可预测的结果。 6. **线程优先级** 每个线程都有一个优先级,可以使用`Thread.Priority`...
节点异常终止控制器基于EventEmitter的Node.JS的AbortController Polyfill用法import fetch from 'node-fetch'import AbortController from 'node-abort-controller'const controller = new AbortController ( )...
在C#中,线程的创建和使用主要依赖于`System.Threading`命名空间中的`Thread`类。创建一个新的线程通常涉及以下步骤: 1. **定义任务代码**:这是将在新线程上运行的代码块。 2. **实例化`Thread`对象**:将前面...
1. **线程协作终止:** C#中,线程的协作终止通常涉及到线程的取消标志,如`Thread.IsAlive`和`Thread.Abort()`。但`Thread.Abort()`不推荐使用,因为它会抛出一个异常,可能会导致未处理的异常和不稳定状态。相反,...
总的来说,C#中实现安全地终止正在执行的线程,应该避免使用`Thread.Abort`,转而采用协作终止策略,通过共享标志来通知线程何时退出,并确保在退出前正确释放资源。这种方式能够提高代码的健壮性,减少并发问题,是...