上一页 1 2 3 4 5 6 7 ··· 13 下一页
摘要: 本文的重点在于介绍如何在多线程编程中,从非UI线程上访问界面中的控件。有过多线程编程经验的人都知道,当我们在非UI线程上试图给一个界面中的控件赋值的时候,比如说label的Text属性,系统会抛出一个下面的异常:这是由于.Net中的大部分控件的实例都是非线程安全的,如果进行跨线程的访问,可能会造成脏数据,所以.Net默认禁止这种跨线程的赋值操作。那要如何解决这个问题呢?既然.Net禁止跨线程的赋值操作,那么需要给控件赋值的非UI线程就只有将这种赋值的请求传递给UI线程,最终由UI线程完成赋值的操作。如何传递这种请求?幸运的是,Control类提供了一个Invoke方法。这个方法的功能是将Inv 阅读全文
posted @ 2014-03-04 15:51 gejianhua 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 从2004年底开始接触C#到现在也有2年多的时间了,因为有C++方面的基础,对于C#,我习惯于与C++对比。现在总结一些.NET方面的性能优化方面的经验,算是对这两年多的.NET工作经历的总结。 由于使用C#时间不长,欢迎各高手补充。 标有★表示特别重要,会严重影响性能,程序中不应出现的情况。1. C#语言方面1.1 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意。1.1.1 避免不必要的对象创建 由于垃圾回收的代价较高,所以C#程序开发要遵循的一个基本原则就是避免不必要的对象创建。以下列举一些常见的情形。1.1.1.1 避免循环创 阅读全文
posted @ 2014-03-02 15:18 gejianhua 阅读(3853) 评论(1) 推荐(0) 编辑
摘要: select b.name as table_name,a.name as column_name,t.name type_name ,a.max_length ,a.precision,a.scale,isnull(c.value,N'') as memofrom sys.columns a join sys.tables b on a.object_id=b.object_id and b.type=N'U'join sys.types t on a.system_type_id=t.system_type_idleft join sys.extended_ 阅读全文
posted @ 2014-02-28 19:00 gejianhua 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 1.可选参数可以为方法的参数设置一个默认值,如下:classProgram{staticvoidMain(string[] args){Show();Show("cary");Console.ReadLine();}publicstaticvoidShow(stringmsg =""){Console.WriteLine("Hello {0}",msg);}}2.命名参数上面的Show方法可以象下面的方式调用:Show(msg:"cary");当你的方法有多个同一类型的可选参数(optional parameter 阅读全文
posted @ 2014-02-28 14:31 gejianhua 阅读(394) 评论(0) 推荐(1) 编辑
摘要: 先举个例子:代码如下:class Program{static void Main(string[] args){Console.WriteLine(Sum(1));Console.WriteLine(Sum(1, 2, 3));Console.WriteLine(Sum(1, 2, 3, 4, 5));Console.ReadKey();}private static int Sum(params int[] values){int sum = 0;foreach (int value in values)sum += value;return sum;}}实现了一个Sum方法,用于接收一组 阅读全文
posted @ 2014-02-28 12:28 gejianhua 阅读(11502) 评论(0) 推荐(0) 编辑
摘要: 本文主要描述在C#中线程同步的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入主题,在多线程开发的应用中,线程同步是不可避免的。在.Net框架中,实现线程同步主要通过以下的几种方式来实现,在MSDN的线程指南中已经讲了几种,本文结合作者实际中用到的方式一起说明一下。1. 维护自由锁(InterLocked)实现同步2. 监视器(Monitor)和互斥锁(lock)3. 读写锁(ReadWriteLock)4. 系统内核对象1) 互斥(Mutex), 信号量(Semaphore), 事件(AutoResetEvent/ManualResetEvent)2) 线程池除了以上的这些对象之外实 阅读全文
posted @ 2014-02-26 10:48 gejianhua 阅读(6662) 评论(0) 推荐(0) 编辑
摘要: 线程安全集合http://msdn.microsoft.com/zh-cn/library/dd997305.aspx 阅读全文
posted @ 2014-02-19 22:14 gejianhua 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 恐怕比较一下volatile和synchronized的不同是最容易解释清楚的。volatile是变量修饰符,而synchronized则作用于一段代码或方法;看如下三句get代码:inti1;intgeti1(){returni1;}volatileinti2;intgeti2(){returni2;}inti3;synchronizedintgeti3(){returni3;} geti1()得到存储在当前线程中i1的数值。多个线程有多个i1变量拷贝,而且这些i1之间可以互不相同。换句话说,另一个线程可能已经改 变了它线程内的i1值,而这个值可以和当前线程中的i1值不相同。事实上,Jav. 阅读全文
posted @ 2014-02-19 22:10 gejianhua 阅读(17129) 评论(3) 推荐(3) 编辑
摘要: 我们知道,在.net的一些集合类型中,譬如Hashtable和ArrayList,都有Synchronized静态方法和SyncRoot实例方法,他们之间有联系吗?我怎么才能用好他们呢?我们以Hashtable为例,看看他们的基本用法:Hashtableht=Hashtable.Synchronized(newHashtable());lock(ht.SyncRoot){//一些操作}1,Synchronized表示返回一个线程安全的Hashtable,什么样的hashtable才是一个线程安全的呢?下边我们就从.NET的源码开始理解。publicstaticHashtableSynchron 阅读全文
posted @ 2014-02-19 22:00 gejianhua 阅读(468) 评论(0) 推荐(0) 编辑
摘要: 详解.NET异步详解 ASP.NET异步我所知道的.NET异步.NET异步编程总结----四种实现模式.net异步编程 阅读全文
posted @ 2014-02-19 21:42 gejianhua 阅读(189) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 13 下一页