软件界面的响应特性是判断一款软件的非常重要的方面。一般来说,不管你软件功能做得有多么奇妙,如果软件有一点点死机的感觉都会让用户感到很讨厌,甚至怀疑你软件里是否藏有更大的问题。
要提高界面的响应特性,最好的办法莫过于使用多线程,并把呈现界面的线程独立出来。以前只有使用C++才能实现的多线程功能,现在在.Net框架下,所有的语言(包括VB)都可以使用了。不过,使用多线程比使用单一线程要麻烦得多,比如线程之间的同步问题,做得不好很容易出错,而有的时候这种错误要开发人员花上几个星期的时间才能找到。在Windows Form软件中使用多线程更是有一些限制。
下面我们就把在Windows Form软件中使用多线程要注意的问题给大家做一个介绍。
首
先,什么样的操作需要考虑使用多线程?总的一条就是,负责与用户交互的线程(以下简称为UI线程)应该保持顺畅,当UI线程调用的API可能引起阻塞时间超过30毫秒时(比如访问CD-ROM等速度超慢的外设、进行远程调用等等)就应该考虑使用多线程。为什么是30毫秒?30毫秒的概念是人眼可以察觉到的一个迟滞,大约等同于电影里的一帧停留的时间,最长不要超过100毫秒。
第二,最方便和简单的多线程是使用线程池。通过线程池里的线程运行代码的最简便方法则是使用异步委托调用。注意委托调用通常是同步完成的,请使用BeginInvoke方法,这样就可以把要调用的方法排队到线程池里等候处理,而程序的流程会立刻返回到调用方(此处是UI线程),而调用方因此不会出现阻塞。
看看下面的例子我们就发现要使用线程池异步执行代码也并非十分复杂,这里我们利用System.Windows.Fo