标签 C# 下的文章

Assembly(汇编)、C、C++、Java、C#访谈

会长:访谈时间还差5分钟,下面我们先看看各大语言们在讨论干些什么吧。
<会长走到了幕后>
Assembly:我是计算机程序设计界的老大,用我写的程序运行效率最高,所以我觉得全世界应该都用我这门语言。

C:首先我极力反对这句话,Assembly运行效率虽高,但开发效率极端底下,而且特定于CPU指令集,移植等异常困难。看看由我写的程序吧,一行可以顶你Assembly十多行,而且源代码可移植,多方便啊。

C#之父Anders Hejlsberg 的故事

c#之父是Anders Hejlsberg, 一个丹麦天才。他和idsoft的John Carmack都是自学成才的典范。 他对语言和汇编的理解全世界没几个人能超越。
当年Philippe Kahn(Borland的创始人)和Anders Hejlsberg到美国创业时,便由Anders以汇编语言撰写了Turbo Pascal的编译器,而Philippe则包办了Turbo Pascal其他的部分。在这两位仁兄开发Turbo Pascal之后,穷得快连登广告的钱都没有了。Philippe为了在Byte杂志(还记得这个著名的杂志吗?)刊登Turbo Pascal的广告,和Anders商量了一个方法,那就是直接约Byte杂志的人到当时Borland的办公室讨论刊登广告的事情。

InvokeRequired 属性 与Invoke方法

在设计中为了让界面与逻辑分离,我的做法是使用事件,界面只要响应事件来处理界面的显示就行了。而事件在逻辑处理中可能由不同的线程引发,这些事件的响应方法在修改界面中的控件内容时便会引发一个异常。

这时就用到了Control.InvokeRequired 属性 与Invoke方法。

MSDN中说:
获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。
如果控件的 Handle 是在与调用线程不同的线程上创建的(说明您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false。
Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性 。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。该属性可用于确定是否必须调用 Invoke 方法,当不知道什么线程拥有控件时这很有用。

listBox1.InvokeRequired学习

控件只能由创建它的线程来访问。其他线程想访问必须调用该控件的Invoke方法。Invoke有两个参数,一个是委托方法,一个是参数值。下面代码就是举例为ListBox添加数据。