摘要:额,我猜你现在可能会这么想“既然线程会对我的程序产生负面影响,那么我为什么要使用它呢?”。其实问题的关键不在于到底用不用线程,而在于何时何地使用线程。知道在什么情况下应该使用线程是好的设计决策的核心。使用线程有两个不同的优势。在这一部分,我们将讨论这两个优势是什么。 后台处理逻辑 第一个使用线程的优势是当你需要在后台运行一个很耗时的操作同时希望用户界面仍然可用时。我们都遇到过很多次由于后台在查... 阅读全文
C# 线程手册 第二章 .NET 中的线程 终止/等待线程
2012-01-16 22:53 by DanielWise, 10199 阅读, 3 推荐, 收藏, 编辑
摘要:Abort()方法可以用来终止当前线程。不论何种情况下你想终止线程,比如线程执行了太长时间或者用户取消了之前的决定,Abort()方法都很重要。在一个花费很长时间的搜索进程中你可能想使用这个方法。一个搜索引擎可能在继续运行但是用户已经看到了他们想要的结果,所以用户会终止搜索引擎所运行的线程。当在一个线程外调用Abort()方法时,会引发一个ThreadAbortException异常。如果线程代码中没有捕获这个异常,那么线程将会终止。在为一个可能被多线程上下文访问的方法写异常处理代码时要多考虑一下,比如该使用Catch(ThreadAbortException)的地方不要使用Catch(Exc 阅读全文
C# 线程手册 第二章 .NET 中的线程 线程挂起与恢复
2012-01-16 17:10 by DanielWise, 15329 阅读, 4 推荐, 收藏, 编辑
摘要:线程类的Suspend() 和 Resume() 方法可以用来挂起/恢复线程。Suspend()方法将会立即挂起当前线程直到另外一个线程把它唤醒。当我们调用Suspend()方法时,线程将会进入SuspendRequested 或者 Suspended 状态。我们来看一个例子。我们创建一个新的C#应用程序并在一个新线程中生成素数。这个应用程序有挂起以及恢复素数生成线程的选项。为了方便操作和演示,我们创建一个新的C# 窗体应用程序, PrimeNumbers:程序界面上有一个列表和 三个控制按钮。列表用来显示素数,三个控制按钮用来启动、挂起以及恢复线程。初始化时我们会将挂起和恢复按钮禁用,由于这 阅读全文
C# 线程手册 第二章 .NET 中的线程 线程的生命周期
2012-01-15 21:51 by DanielWise, 7798 阅读, 10 推荐, 收藏, 编辑
摘要:当一个线程计划执行时它可以经过几个状态,包括未开始,活跃,睡眠,等等。线程类包含几个允许你启动、停止、恢复、退出、暂停以及等待一个线程的方法。我们可以使用ThreadState属性来获取线程的当前状态,状态值可能是ThreadState枚举中的一个:Aborted - 线程当前处理停止状态,但是不一定已经执行完。AbortRequested – 已经调用Abort() 方法但是线程还没有接收到将试图终止线程的System.Threading.ThreadAbortexception。虽然线程还没有停止,但是马上就会。Background - 线程在后台执行。Running - 线程已经启动而且 阅读全文
C# 线程手册 第二章 .NET 中的线程 时钟和回调
2012-01-13 16:09 by DanielWise, 4591 阅读, 2 推荐, 收藏, 编辑
摘要:我们已经看过一些线程的例子了。尽管我们将要在下一章深入介绍同步问题,但就目前来说还没有介绍过它。由于线程与应用程序代码中的其他代码相比是无序运行的,我们不能确定在一个线程中影响一个特定共享资源的动作会在另外一个线程访问同样共享资源之前完成。有很多方法处理这些问题,但是这里我们将介绍一种简单方式;使用定时器/时钟。通过定时器,我们可以确定一个方法在一个特定时间间隔内执行,这个方法可以在继续运行之前检查需要的动作是否已经完成。这是一个非常简单的模型,但是可以应用到很多场景中去。时钟由两个对象组成,一个TimerCallback 和 一个定时器。TimerCallback委托定义了在一个特定间隔内要 阅读全文
C# 线程手册 第二章 .NET 中的线程 创建一个线程
2012-01-10 20:58 by DanielWise, 8263 阅读, 4 推荐, 收藏, 编辑
摘要:我们将写一个简单的例子。对于我们为什么使用一个新的线程来说这不是一个好例子但是它将我们稍后要提到的复杂问题都去掉了。创建一个simple_thread.cs文件并把下面的代码粘贴进去:/*************************************/* Copyright (c) 2012 Daniel Dong * * Author:Daniel Dong * Blog: www.cnblogs.com/danielWise * Email: guofoo@163.com * */using System;using System.Collections.Generic;u... 阅读全文
C# 线程手册 第二章 .NET 中的线程
2012-01-07 14:32 by DanielWise, 2855 阅读, 3 推荐, 收藏, 编辑
摘要:概述 在第一章我们描述了什么是线程。我们讲述了很多人可能已经很熟悉的背景知识。知道了线程的哪部分最重要。在这一章,你将看到如何实现一些基本的线程;然而了解何时使用线程相对知道基本实现来说更重要一些。 在这章的最后,你将了解: 1. System.Threading 命名空间。 2. 使用线程时有什么设计问题? 3. 线程使用什么资源? 4. 使用线程时要避免什么错误? Syst... 阅读全文
C# 线程手册 第一章 线程定义 .NET 和 C# 对线程的支持
2012-01-05 16:47 by DanielWise, 4197 阅读, 2 推荐, 收藏, 编辑
摘要:由于.NET Framework 支持自由线程,所以自由线程在所有.NET 语言中都存在,包括C#和VB.NET. 在下一部分,我们将着重关注如何提供这种支持以及更多关于线程是如何做到的,而不再关注线程是什么。我们将讨论一些能够进一步帮助区分进程的额外支持。在这一部分的最后,你将理解:1. 什么是System.AppDomain 类以及它可以帮助你做什么?2. .NET runtime(运行时)如何监控线程?System.AppDomain当我们在这一章的早些时候解释进程时,我们知道进程是对维系进程存在的内存和资源的物理隔离。我们后来说到一个进程至少有一个线程。当初微软设计.NET Frame 阅读全文
C# 线程手册 第一章 线程定义 线程
2012-01-04 14:54 by DanielWise, 4977 阅读, 7 推荐, 收藏, 编辑
摘要:你也会注意到任务管理器中有CPU使用率的信息。这是因为进程也有一个使用计算机处理器的执行顺序。这个执行顺序就是线程。这个线程由CPU上正在使用的寄存器,线程使用的堆栈以及保存线程当前状态的存储器共同定义。存储器和堆栈的概念对那些经常处理底层内存分配的同僚们来说应该很熟悉;然而,对.NET Framework 中的堆栈来说,你可以把它看成一块用来快速访问数据,存储值类型或者指向对象、方法参数以及每个... 阅读全文
C# 线程手册 第一章 线程定义
2011-12-30 10:55 by DanielWise, 5198 阅读, 6 推荐, 收藏, 编辑
摘要:概要多线程是一种将一个应用程序切分成“线程”并按步骤运行程序的其他部分的平台开发能力。在大多数编程语言中,你会有一个Main()方法,每行代码都会顺序执行,只有当前面的一行代码执行完,后面的代码才会执行。线程是操作系统常规多任务能力的一个组成部分并允许应用程序的一部分与其他对象的分别执行的一个特定对象,所以不在应用程序通用执行顺序范畴内。在这一章,我们将讨论多任务的不同类型。另外一个概念是自由线程, 它对于大多数C++或者Java程序员来说已经很熟悉了;我们将定义这个概念并进一步讨论在C#中是如何实现的并将简要比较自由线程模型和其他模型,比如Visual Basic 6.0 的apartmen 阅读全文