摘要:每个程序员学编程的时候都是从单线程的程序入手的,等到了具有比较多的编程实践经验后才开始接触到多线程编程,多线程的技术在程序使用上带来新的友好体验的同是也带来了一系列的问题,其中最大的一个问题就是“同步/死锁”。 在C#中提供了多种实现同步的类和方法,下面就分别对每种方式作一个说明。
阅读全文
posted @ 2008-12-24 11:44
|
|||
12 2008 档案
摘要:每个程序员学编程的时候都是从单线程的程序入手的,等到了具有比较多的编程实践经验后才开始接触到多线程编程,多线程的技术在程序使用上带来新的友好体验的同是也带来了一系列的问题,其中最大的一个问题就是“同步/死锁”。 在C#中提供了多种实现同步的类和方法,下面就分别对每种方式作一个说明。
阅读全文
posted @ 2008-12-24 11:44
摘要:通常我们在做多线程编写WinForm程序的时候经常听到的一句话就是“窗体控件只能在主线程中创建”,刚开始的时候我也接受的是这样的教育,因此一直以来一直在编程中有意识的这样做了。平时也没有过多的去想为什么要这样做,就把这个当做是一条公理了,就像是数学中“两个不同的点确定一条直线,三个不在同一直线上的点确定一个平面”一样那么简单。
最近又一次在做一个WinForm程序,突发奇想想要试试在非主线程创建一个窗体控件会有什么结果为什么不能这样做。
结果运行这段程序的时候@1这个地方的两行代码也执行到了,可是却一点问题都没有,没有异常,没有特殊的提示,程序也能正常退出。这是怎么回事呢?不是说不能在非主线程上创建控件吗?可是我这个程序不是好好的运行着又怎么解释呢。带着这样的问题我又回头去看了一个自己写的代码,这次发现了一个问题:frm 调用的是ShowDialog方法,这会使调用线程一直阻塞在这个地方。会不会是这个原因呢?于是我把ShowDialog替换成了Show方法,一试,果然就出错了。我又试了其它几种常见的控件,TextBox,Label,Button都是这样,唯一
阅读全文
posted @ 2008-12-23 15:27
摘要: C#里面没有现成的DirectShow的COM组件的定义,虽说在C#中可以使用一些特定的方式来操作COM组件(C#中COM操作(一)---实例化),可是对于DirectShow这样需要声明一大批的COM接口,类型,枚举却是一件漫长又枯燥的事件,而且搞不好一个不小心中间出个错误,导致最后调试总不通过而抓狂。即便是现在有了DirectShow.NET提供的对绝大部分的DirectShow的C#翻译,可是面对网上那么多的C++开源代码还有少得可怜的C#操作DirectShow的代码,你会怎么办?难道又是一行一行的翻译成C#吗,反正我是不会这样干的,于是这种方式首先被毙掉了。
俗话说最优秀的程序员也是最懒的程序员,类和方法能公用的就尽量公用,已存在的实现就不需要自己再去写一次了。既然有现成的C++的实现好的代码为什么不可以再次拿来用一用呢。可是在C#里面想要使用C++的实现(注意这里我用的是实现,并没有指定是类或方法),比较常见的是通过 DllImportAttribute特性导入相应的程序集,可是这种方式只可以调用方法,而且是限定死了的只能是C语言形式的导出方法。
阅读全文
posted @ 2008-12-22 14:23
|
|||