BLOOG

博客园 首页 联系 订阅 管理

2012年6月13日

摘要: 目录l 导论l 什么是委托l 事件的理解l 事件 关键字l 最后导论 在学习C#中的委托和事件过程中,我读了许多文章来理解他们二者究竟是怎么一回事,以及如何使用他们,现在我将整个的理解过程陈述以下,我学到的每一方面,恐怕也是你们需要掌握的 :-)。什么是委托? 委托和事件这两个概念是完全配合的。委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数。每一个委托都有自己的签名,例如:Delegate int SomeDelegate(string s, bool b);是一个委托申明,在这里,提及的签名, 阅读全文
posted @ 2012-06-13 16:17 BLOOG 阅读(196) 评论(0) 推荐(0)

摘要: 第一种方法在构造函数里使用属性 CheckForIllegalCrossThreadCalls 值设置为 false 即 public Form1() { CheckForIllegalCrossThreadCalls = false; } 第二种方法访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。.NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时,如果创建某控件的线 阅读全文
posted @ 2012-06-13 16:16 BLOOG 阅读(406) 评论(0) 推荐(0)

摘要: 上下文关键字用于提供代码中的特定含义,但它不是 C# 中的保留字。get、set、valueget 在属性或索引器中定义“访问器”方法,以检索该属性或该索引器元素的值。set 义属性或索引器中的“访问器”方法,用于设置属性或索引器元素的值。value 隐式参数,用于设置访问器以及添加或移除事件处理程序。//简单示例classEmployee{privatestring_name;publicstringName{get{returnthis._name;}set{this._name=value;}}}注意:get、set“访问器”,在默认情况下具有相同的访问级别。但是有时鉴于对读写的考虑,通 阅读全文
posted @ 2012-06-13 16:14 BLOOG 阅读(130) 评论(0) 推荐(0)

摘要: C#中的委托和事件(续)引言如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识。但那些远不是委托和事件的全部内容,还有很多的地方没有涉及。本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器、异常处理、超时处理和异步方法调用等内容。为什么要使用事件而不是委托变量?在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因。主要是从封装性和易用性上去考虑,但是还漏掉了一点,事件应该由事件发布者触发,而不应该由客户端(客户程序)来触发。这句话是什么意思呢?请看下面的范例:NOTE:注 意这 阅读全文
posted @ 2012-06-13 13:03 BLOOG 阅读(88) 评论(0) 推荐(0)

摘要: PDF 浏览:http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量)。例如:委托类型 委托实例 = new 委托类型(方法名); 欢迎浏览本文的后续文章: C#中的委托和事件(续)源码下载:http://www.tracefact.net/SourceCode/Delegates-and 阅读全文
posted @ 2012-06-13 13:02 BLOOG 阅读(73) 评论(0) 推荐(0)

摘要: 今天终于搞清楚InvokeRequired 这玩意了。。。如下:在设计中为了让界面与逻辑分离,我的做法是使用事件,界面只要响应事件来处理界面的显示就行了。而事件在逻辑处理中可能由不同的线程引发,这些事件 的响应方法在修改界面中的控件内容时便会引发一个异常。这时就用到了Control.InvokeRequired 属性 与Invoke方法。MSDN中说:获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke方法,因为调用方位于创建控件所在的线程以外的线程中。如果控件的 Handle 是在与调用线程不同的线程上创建的(说明您必须通过 Invoke方法对控件进行调用),则为 tr 阅读全文
posted @ 2012-06-13 11:38 BLOOG 阅读(365) 评论(0) 推荐(0)

摘要: 属性列表: SelectionMode 组件中条目的选择类型,即多选(Multiple)、单选(Single) Rows 列表框中显示总共多少行 Selected 检测条目是否被选中 SelectedItem 返回的类型是ListItem,获得列表框中被选择的条目 Count 列表框中条目的总数 SelectedIndex 列表框中被选择项的索引值 Items 泛指列表框中的所有项,每一项的类型都是ListItem2. 取列表框中被选中的值 ListBox.SelectedValue 3. 动态的添加列表框中的项: ListBox.Items.Add("所要添加的项");4 阅读全文
posted @ 2012-06-13 11:27 BLOOG 阅读(344) 评论(0) 推荐(0)

摘要: 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:1、假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?2、某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) 。既然是 Sleep 0 毫秒,那么他跟去掉这句代码相比,有啥区别么?我们先回顾一下操作系统原理。操作系统中,CPU竞争有很多种策略。Unix系统使用的是时间片算法,而Windows则属于抢占式的。 阅读全文
posted @ 2012-06-13 09:39 BLOOG 阅读(340) 评论(0) 推荐(0)

摘要: C#程序实现动态调用DLL的研究摘要:在《csdn开发高手》2004年第03期中的《化功大法——将DLL嵌入EXE》一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“DLL Hell”提供了一种解决方案。这是一个很好的设计思想,而且该作者也用C++实现了,在Internet上也有相似的VB程序,但在某一技术论坛上提起这种设计方法时,有网友提出:“这种方法好是好,但就是启动速度太慢”。这是因为程序启动时实现DLL释放,然后再加载释放出来的DLL,这个过程会 阅读全文
posted @ 2012-06-13 09:37 BLOOG 阅读(182) 评论(0) 推荐(0)