C#
文章平均质量分 75
songziling
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C# 中的委托和事件
引言<br />委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。将方法作为方法的参数<br />我们先不管这转载 2011-01-25 14:33:00 · 250 阅读 · 0 评论 -
Mutex类及它的兄弟
转帖:http://www.cnblogs.com/1-2-3/articles/1212391.html摘要1-2-3翻开那《葵花宝典》,只见页首赫然写着几个大字:“欲练神功,必先自宫”,旁边几行歪歪扭扭的小字,又不知是哪位前辈高人所写:“在WC里占蹲位的3种方法:1. 如果你只对某个蹲位情有独钟,就要WaitOne(),但是不要忘了ReleaseMutex(转载 2011-06-10 08:50:00 · 778 阅读 · 1 评论 -
线程学习1——异步委托
一.为什么使用线程 简单来讲,就是用线程来实现,在程序运行过程中,还可以同时执行其他操作。二.线程的概述 线程是程序中独立的指令流。使用C#编写任何程序时,都有一个入口:Main()方法。程序从Main()方法的第一条语句开始执行,直到这个方法返回为止。 在.net framework class library中,所有与多线程机制应用相关的类都是放在System原创 2011-06-10 10:28:00 · 504 阅读 · 0 评论 -
线程学习2——Thread类
Thread 类 使用Thread类可以创建和控制线程,Thread类有如下方法: Start():启动线程; Sleep(int):静态方法,暂停当前线程指定的毫秒数; Abort():通常使用该方法来终止一个线程; Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复; Resume():恢原创 2011-06-10 10:21:00 · 383 阅读 · 0 评论 -
线程学习3——前台线程和后台线程
前台线程和后台线程 线程默认为前台线程,这意味着任何前台线程在运行都会保持程序存活。 后台线程:只要有一个前台线程在运行,应用程序的进程就在运行。如果多个前台线程在运行,而Main()方法结束了,应用程序的进程就是激活的,直到所有前台线程完成其任务为止。 前台线程和后台线程的唯一的区别是— 后台线程不会阻止进程终止。 在默认情况下,用Th原创 2011-06-10 10:08:00 · 490 阅读 · 0 评论 -
线程学习10——BackgroundWorker类
基本概念注意:此类在 .NET Framework 2.0 版中是新增的。BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地原创 2011-06-10 08:46:00 · 424 阅读 · 0 评论 -
多线程与Invoke,Beginvoke
首先,什么样的操作需要考虑使用多线程? 总的一条就是,负责与用户交互的线程(以下简称为UI线程)应该保持顺畅,当UI线程调用的API可能引起阻塞时间超过30毫秒时(比如访问CD-ROM等速度超慢的外设、进行远程调用等等)就应该考虑使用多线程。 为什么是30毫秒?30毫秒的概念是人眼可以察觉到的一个迟滞,大约等同于电影里的一帧停留的时间,最长不要超过10转载 2011-06-10 08:52:00 · 851 阅读 · 3 评论 -
C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
C#中使用Monitor类、Lock和Mutex类来同步多线程的执行 在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中由于大部分都是单线程的程序,所以没有加锁的必要,但是在多线程中,为了保持数据的同步,一定要加锁,好在Framework中已经为我们提供了三个加锁的机制,分别是Monitor类、转载 2011-06-10 08:48:00 · 361 阅读 · 0 评论 -
Control的Invoke和BeginInvoke
我们要基于以下认识:(1)Control的Invoke和BeginInvoke与Delegate的Invoke和BeginInvoke是不同的。(2)Control的Invoke和BeginInvoke的参数为delegate,委托的方法是在Control的线程上执行的,也就是我们平时所说的UI线程。代码(一)(Control的Invoke)priv转载 2011-06-10 08:55:00 · 419 阅读 · 0 评论 -
线程学习9——Mutex类
互斥: 在操作系统中,许多线程常常需要共享资源,而这些资源往往要求一次只能为一个线程服务(排他性),这种排他性地使用共享资源称为线程间的互斥。线程互斥实质上也是同步,可以看做一种特殊的线程同步。Mutex类:线程的互斥常用Mutex类实现,利用它可以对资源进行独占性访问。与Monitor类相似,只有获取Mutex对象的所属权的线程才能进入临界区,未获得Mute原创 2011-06-10 08:44:00 · 364 阅读 · 0 评论 -
线程学习6——死锁
死锁多线程中,常见的一种问题除了竞态条件外就是死锁。那什么是死锁呢?死锁就是:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。那么为什么会产生死锁呢?1.因为系统资源不足。2.进程运行推进的顺序不合适。3.资源分配不当。学过操作系统的朋友都知道:产生死锁的条件有四个:1.互斥条件:所原创 2011-06-03 11:08:00 · 376 阅读 · 0 评论 -
线程学习5——竞态条件
竞态条件概述:如果两个或两个以上的线程同时访问相同的对象,或者访问不同步的共享状态.就会出现竞态条件。举例:如果多个线程同时访问类StateThread中的方法,最后结果会如何呢?定义一个类StateThread,它包含一个int字段mState和一个方法ChangeIntValue。在ChangeIntValue方法中,验证mState变量是否包含10,如果是,就增其值。原创 2011-06-03 11:07:00 · 675 阅读 · 0 评论 -
线程学习8——Monitor类
Monitor类提供同步对对象的访问的机制。lock语句就是由编译器解析为使用Monitor类。例如:lock(obj) {.........}解析为Monitor.Enter ()方法,该方法会一直等待,直到线程获得对象的锁定为止。那么如何解除锁定呢?Monitor类提供了Exit()方法解除锁定。 Monitor类具有以下功能: 它根据需要与某个对原创 2011-06-03 14:01:00 · 483 阅读 · 0 评论 -
线程学习7——lock语句
什么是lock语句?lock语句是设置锁定和解除锁定的一种简单方式。为什么使用lock语句?在使用多线程的过程中,会出现很多难以发现的问题,比如竞态条件与死锁,为了避免这些同步问题,所以使用lock语句,当然这并不是解决同步问题的唯一方法。lock语句的作用: lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果原创 2011-06-03 11:09:00 · 496 阅读 · 0 评论 -
线程学习4——线程池
线程池 创建线程是需要时间的。许多应用程序使用多个线程,但这些线程经常在休眠状态中耗费大量的时间来等待事件发生。 为了简化对这些线程的管理,.NET框架为每一个进程提供了一个线程池,使应用程序能够根据需要来有效地利用多个线程。 线程池线程都是后台线程。每个线程都使用默认堆栈大小,以默认的优先级运行,并处于多线程单元中。 ThreadPool类会在需要时增原创 2011-06-10 10:03:00 · 594 阅读 · 0 评论
分享