
【C# 线程、异步、委托】
文章平均质量分 83
雪天飞山狐狸
吃饱穿暖活下来
展开
-
委托和匿名委托的比较
点击打开链接感觉匿名委托使用起来更简洁一点,不用在定义一个专用的委托函数来传递方法,也更可以更好的理解委托。比较一下: Code #region 匿名委托 //定义委托 delegate string lookMe(string s); protected void LinkButton1_Click(obje转载 2015-04-10 13:52:59 · 525 阅读 · 0 评论 -
Lambda表达式及其优势
.NET 3.5中委托的写法(Lambda表达式)Lambda表达式在C#中的写法是“arg-list => expr-body”,“=>”符号左边为表达式的参数列表,右边则是表达式体(body)。参数列表可以包含0到多个参数,参数之间使用逗号分割。例如,以下便是一个使用Lambda表达式定义了委托的示例1:Func max = (int a, int b) =>{ if (转载 2013-12-09 11:14:04 · 776 阅读 · 0 评论 -
一个最简单的C#事件例子
一些初学者在学习事件的时候总觉得很难,其实可以从简单入手,虽然简单,但却包含了事件的整个机制流程等,要多想,再进行扩展,学起来就容易些了。这个例子简单到只有两个类,一个事件发送类Sender,和一个事件接收类Receiver。Sender负责发送一个事件Event,Receiver负责接收和处理这个事件。先来看Sender类: public class Sen转载 2013-09-18 16:35:35 · 839 阅读 · 0 评论 -
C# 事件等大牛
http://www.cnblogs.com/michaelxu/category/70613.html转载 2013-09-18 16:36:29 · 763 阅读 · 0 评论 -
Control的Invoke和BeginInvoke
近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下。感谢这篇文章对我的理解Invoke和BeginInvoke的真正含义 。(一)Control的Invoke和BeginInvoke我们要基于以下认识:(1)Control的Invoke和BeginInvoke与Delegate的Invoke和BeginInvoke是不同的。(2)Co转载 2012-11-19 10:05:34 · 544 阅读 · 0 评论 -
Delegate.BeginInvoke例子
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;name转载 2012-11-19 10:10:05 · 567 阅读 · 0 评论 -
Invoke 和 BeginInvoke 的真正涵义
BeginInvoke 方法真的是新开一个线程进行异步调用吗?参考以下代码:public delegate void treeinvoke();private void UpdateTreeView(){ MessageBox.Show(System.Threading.Thread.CurrentThread.Name);}private void button1转载 2012-11-19 10:11:39 · 520 阅读 · 0 评论 -
使用BackgroundWorker组件
BackgroundWorker 组件用来执行诸如数据库事务、文件下载等耗时的异步操作。开始在应用程序中添加一个BackgroundWorker实例,如果用的是VS,可以从工具上直接拖到应用程序:BackgroundWorker backgroundWorker1 = new BackgroundWorker();为了开始在后台操作,必须调用Backgrou转载 2013-12-18 20:44:20 · 609 阅读 · 0 评论 -
backgroundworker与Thread区别
在我编写的一个程序中创建500个Thread后,程序垮掉。然而创建500个BackGroundWorker后,程序就能正常运行。这是为什么呢? 当用户执行一个非常耗时的操作时,如果不借助Thread编程,用户就会感觉界面反映很迟钝。在.Net 2.0中可以通过BackgroundWork非常方便地进行Thread编程,大致的步骤是:1、调用BackgroundWorker的RunWork转载 2013-12-18 20:46:56 · 798 阅读 · 0 评论 -
线程与同步之二——互斥量
我们可以通过pthread提供的互斥量接口来保护我们的数据,确保每次只有一个线程访问。从本质上说就是一把锁,我们在访问共享数据的时候设置(上锁),在访问完成后释放(解锁)。当我们解锁互斥量的时候,如果有多余一个的线程被阻塞,则所有阻塞在这个锁的进程都被唤醒,变成可以运行的状态。接下来,只有一个线程开始运行并设置锁,其他的看到互斥量仍然是被锁定,继续等待。 1. 初始化:转载 2014-01-16 14:20:01 · 577 阅读 · 0 评论 -
线程同步之四——条件变量
1.互斥量的存在问题: 互斥量是线程程序必需的工具,但它们并非万能的。例如,如果线程正在等待共享数据内某个条件出现,那会发生什么呢?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。 在每次检查之间,可以让调用线程短暂地进入睡眠,比如睡眠三秒钟,但是因此线程代码就无法最快作出响应。真正需要的是这转载 2014-01-16 14:24:53 · 788 阅读 · 0 评论 -
匿名方法的使用
匿名方法相信很多人都听过,它是C#2.0的一个新特性,顾名思义,匿名方法就是没有名称的方法。那么在C#中的匿名方法有哪些好处,在C#中如何使用呢?匿名方法最明显的好处就是可以降低另写一个方法的工作量,另外一个好处就是可以访问调用者的变量,降低传参数的复杂度,下面就通过一些使用例子来具体看看。1、在事件中使用匿名方法下面是一个定时器的小例子,我们常规的写法如下: c转载 2013-12-09 11:13:27 · 847 阅读 · 0 评论 -
什么是.Net异步机制呢?
点击打开链接转载 2014-08-14 17:30:16 · 674 阅读 · 0 评论 -
Delegate,Action,Func,匿名方法,匿名委托,事件
.net中的线程也接触不少了。在多线程中最常见的应用莫过于有一个耗时的操作需要放到线程中去操作,而在这个线程中我们需要更新UI,这个时候就要创建 一个委托了来更新UI了,不然会报错的。下面我们就来设计一个简单的场景:窗体上有一个按钮和进度条,按钮按下后启动一个线程让进度条滚动。需要说明一下的是,我们这里不讨论使用匿名委托,lambda的好坏,我们只有一个目标就是使得我们的程序:短点,短点,再短点。转载 2015-04-10 13:56:56 · 1497 阅读 · 0 评论 -
常用常忘的delegate,记一下。
(new Thread(new ThreadStart(Method1))).Start();(new Thread(new ParameterizedThreadStart(Method1))).Start(value);(new Thread(delegate(){ // TODO:})).Start(); (new Thread(dele转载 2015-04-10 13:49:51 · 759 阅读 · 0 评论 -
C#自定义事件实现简介
目标:通过一个实例来按步骤说明C#自定义事件如何创建,引发,接收和取消。例子是一个窗体程序,一个按钮和一个标签,点击按钮的时候就触发一个事件得到当前时间,如果秒是后30秒就输出一个Wasn't a right time!!创建一个事件类型: 1.新建一个窗体应用程序,添加一个button和lebelInfo,name分别为buttonRaise和labelInfo。转载 2013-12-27 20:02:39 · 1712 阅读 · 0 评论 -
C#序列化详解
.net的运行时环境用来支持用户定义类型的流化的机制。它是将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。 序列化的目的: 1、以某种存储形式使自定义对象持久化; 2、将对象从一个地方传递到另一个地转载 2014-04-25 08:54:45 · 894 阅读 · 0 评论 -
C#多线程与UI响应
软件界面的响应特性是判断一款软件的非常重要的方面。一般来说,不管你软件功能做得有多么奇妙,如果软件有一点点死机的感觉都会让用户感到很讨厌,甚至怀疑你软件里是否藏有更大的问题。要提高界面的响应特性,最好的办法莫过于使用多线程,并把呈现界面的线程独立出来。以前只有使用C++才能实现的多线程功能,现在在.Net框架下,所有的语言(包括VB)都可以使用了。不过,使用多线程比使用单一线程要麻烦得转载 2014-07-07 20:49:41 · 656 阅读 · 0 评论 -
浅谈C#中常见的委托
点击打开链接转载 2014-07-08 10:13:03 · 561 阅读 · 0 评论 -
归纳一下:C#线程同步的几种方法
我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在后台处理一大堆数据,但还要使用户界面处于可操作状态;或者你的程序需要访问一些外部资源如数据库或网络文件等。这些情况你都可以创建一个子线程去处理,然而,多线程不可避免地会带来一个问题,就是线程同步的问题。如果这个问题处理不好,我们就会得到一些非预期的结果。 在网上也看过一些关于线程同步的文章,其实线程同步有好几种方法,下面我就转载 2013-09-18 16:33:16 · 787 阅读 · 0 评论 -
[.Net线程处理系列]专题四:线程同步
目录:一、线程同步概述二、线程同步的使用三 、总结 一、线程同步概述 前面的文章都是讲创建多线程来实现让我们能够更好的响应应用程序,然而当我们创建了多个线程时,就存在多个线程同时访问一个共享的资源的情况,在这种情况下,就需要我们用到线程同步,线程同步可以防止数据(共享资源)的损坏。然而我们在设计应用程序还是要尽量避免使用线程同步,转载 2014-01-16 14:42:24 · 664 阅读 · 0 评论 -
C#对象序列化
要让一个对象支持.Net序列化服务,用户必须为每一个关联的类加上[Serializable]特性。如果类中有些成员不适合参与序列化(比如:密码字段),可以在这些域前加上[NonSerialized]特性。 C#支持三种序列化格式:二进制格式(使用BinaryFormatter序列化器)、SOAP格式(使用SoapFormatter序列化器)、XML格式(使用XmlSerializer序列化器转载 2014-04-25 08:50:45 · 842 阅读 · 0 评论 -
理解C#中的Lambda表达式
本文向您介绍C#中的Lambda表达式,通过两种写法的比较分析Lmdba表达式的委托类型和匿名方法。AD:WOT2014:用户标签系统与用户数据化运营培训专场先来看两段C#代码,来比较Lambda表达式:Thread t = new Thread(() => { AddIt AddDelegate = new AddIt(AddItem);转载 2014-07-07 20:53:47 · 689 阅读 · 0 评论 -
[.Net 线程处理系列]专题一:线程基础
引言: 最近一段时间都在研究关于.Net线程的内容,觉得线程是每个程序员都应该掌握的,所以写下这个线程的系列希望能给大家学习过程中一些帮助,同时也是自己对线程的巩固,当中如果有什么错漏还请大家指出,这样我们可以互相得到进步。目录:一、线程的介绍二、线程调度和优先级三、前台线程和后台线程四、简单线程的使用五、小结 一、线程转载 2014-01-16 14:40:10 · 650 阅读 · 0 评论 -
[.Net线程处理系列]专题二:线程池中的工作者线程
目录:一、上节补充二、CLR线程池基础三、通过线程池的工作者线程实现异步四、使用委托实现异步五、任务六、小结 一、上节补充对于Thread类还有几个常用方法需要说明的。1.1 Suspend和Resume方法 这两个方法在.net Framework 1.0 的时候就支持的方法,他们分别可以挂起线程和转载 2014-01-16 14:41:15 · 1145 阅读 · 0 评论 -
C#中异步和多线程的区别
异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为异步和多线程是等同的概念。但是,异步和多线程还是有一些区别的。而这些区别造成了使用异步和多线程的时机的区别。 异步和多线程的区别之异步操作的本质 所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。熟悉电脑硬件的朋友肯定对DMA这个词不转载 2012-11-27 20:39:02 · 805 阅读 · 0 评论 -
线程与同步之三——信号量
信号是 E. W. Dijkstra 在二十世纪六十年代末设计的一种编程架构。Dijkstra 的模型与铁路操作有关:假设某段铁路是单线的,因此一次只允许一列火车通过。信号将用于同步通过该轨道的火车。火车在进入单一轨道之前必须等待信号灯变为允许通行的状态。火车进入轨道后,会改变信号状态,防止其他火车进入该轨道。火车离开这段轨道时,必须再次更改信号的状态,以便允许其他火车进入轨道。 在转载 2014-01-16 14:22:11 · 920 阅读 · 0 评论 -
[.Net线程处理系列]专题五:线程同步——事件构造
引言: 其实这部分内容应该是属于专题四,因为这篇也是讲关于线程同步的,但是由于考虑到用户的阅读习惯问题,因为文章太长了,很多人不是很愿意看包括我也是这样的,同时也有和我说可以把代码弄成折叠的,这样就不会太长的,但是我觉得这样也不怎么便于阅读,因为我看别人的博客的时候,看到有代码是折叠起来的时候很多时候不愿意去点,并且点一下之后同样拉长文章的,然后就看到右边的滚动条变小了,本以为快看完转载 2014-01-16 14:43:13 · 666 阅读 · 0 评论 -
C#多线程编程介绍——使用thread、threadpool、timer
http://www.2cto.com/kf/201207/138929.htmlsystem.threading 命名空间提供一些使得能进行多线程编程的类和接口,其中线程的创建有以下三种方法:thread、threadpool、timer。下面我就他们的使用方法逐个作一简单介绍。1. thread这也许是最复杂的方法,但他提供了对线程的各种灵活控制。首先你必须使用转载 2014-02-20 16:10:02 · 999 阅读 · 0 评论 -
Invoke和BeginInvoke
点击打开链接近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下。感谢这篇文章对我的理解Invoke和BeginInvoke的真正含义 。(一)Control的Invoke和BeginInvoke我们要基于以下认识:(1)Control的Invoke和BeginInvoke与Delegate的Invoke和Begin转载 2014-07-07 21:05:47 · 447 阅读 · 0 评论 -
C#中unhandled异常处理的问题
点击打开链接为了增强现在正在开发的系统的健壮性,需要捕获运行时出现的无法预料而且没有被处理(unhandled)的异常。查了资料后,找到了使用 Application.ThreadException 事件处理这些异常的方法,基本步骤包括, 1、为ThreadException事件添加一个处理异常的函数句柄 2、定义处理异常的函数 例子如下: [STAThread]stati转载 2014-08-28 14:32:15 · 3638 阅读 · 0 评论 -
C#.Net应用程序异常处理
在Program.cs文件的static void Main()中,修改如下:static void Main() { try { //设置应用程序处理异常方式:ThreadException处理 Application.转载 2014-09-10 20:00:23 · 819 阅读 · 0 评论 -
浅谈多核CPU、多线程与并行计算
0.前言最近发觉自己博客转帖的太多,于是决定自己写一个原创的。笔者用过MPI和C#线程池,参加过比赛,有所感受,将近一年来,对多线程编程兴趣一直不减,一直有所关注,决定写篇文章,算是对知识的总结吧。有说的不对的地方,欢迎各位大哥们指正:) 1.CPU发展趋势核心数目依旧会越来越多,依据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的桌面PC有望在2017年末2018年初达到转载 2012-11-15 08:11:59 · 1125 阅读 · 0 评论 -
C# WinForm BackgroundWorker
一、BackgroundWorker组件经验之谈原文:http://www.cnblogs.com/happy555/archive/2007/11/07/952315.html在VS2005中添加了BackgroundWorker组件,该组件在多线程编程方面使用起来非常方便,然而在开始时由于没有搞清楚它的使用机制,走了不少的弯路,现在把我在使用它的过程中的经验与诸位分享一下。转载 2013-12-18 21:47:15 · 697 阅读 · 0 评论 -
如何处理Windows Forms程序中未处理的异常
如果Windows Forms程序中有未被捕获的异常,会导致程序崩溃并且给用户造成不良的印象。例如下面的程序,模拟了一个未捕获的异常: 按钮事件为:private void button1_Click(object sender, EventArgs e){ throw new Exception();}点击Exception 按钮,会弹出如下默认窗口转载 2014-08-28 14:30:34 · 836 阅读 · 0 评论 -
匿名函数 & Lambda 表达式
匿名方法(C# 编程指南)在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法。 C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式。 不过,本主题中有关匿名方法的信息同样也适用于 Lambda 表达式。 有一种情况下,匿名方法提供了 Lambda 表达式中所没有的功能。 您可使用匿名方法来忽转载 2013-12-09 10:52:57 · 968 阅读 · 0 评论 -
C#多线程同步事件及等待句柄
点击打开链接转载 2014-09-22 20:24:42 · 624 阅读 · 0 评论 -
[.Net线程处理系列]专题三:线程池中的I/O线程
上一篇文章主要介绍了如何利用线程池中的工作者线程来实现多线程,使多个线程可以并发地工作,从而高效率地使用系统资源。在这篇文章中将介绍如何用线程池中的I/O线程来执行I/O操作,希望对大家有所帮助。目录:一、I/O线程实现对文件的异步二、I/O线程实现对请求的异步三、小结 一、I/O线程实现对文件的异步1.1 I/O线程介绍:对于线转载 2014-01-16 14:41:56 · 735 阅读 · 0 评论 -
[.Net线程处理系列]专题六:线程同步——信号量和互斥体
也不多说了,直接进入主题了一、信号量(Semaphore)信号量(Semaphore)是由内核对象维护的int变量,当信号量为0时,在信号量上等待的线程会堵塞,信号量大于0时,就解除堵塞。当在一个信号量上等待的线程解除堵塞时,内核自动会将信号量的计数减1。在.net 下通过Semaphore类来实现信号量同步。Semaphore类限制可同时访问某一资源或资源池的线程数。转载 2014-01-16 14:43:41 · 663 阅读 · 0 评论 -
[.Net 多线程处理系列专题七——对多线程的补充
因为有些人可能会疑惑,讲了这么多 多线程,到底在实际的应用上有什么作用的呢? 这里我在这里用多线程简单实现了一个文件的下载的功能。服务器端页面:%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FileServer.Default" %> > html xmlns=转载 2014-01-16 14:44:07 · 718 阅读 · 0 评论