目前,我除自己为客户开发项目外,也要诊断一些客户的程序,因为他们在使用我们公司提供的开发包。

一些程序为了提供多线程支持,经常使用的是消息,timer,thread.

消息:

  利用窗口消息泵来实现线程间通信。因为消息泵是针对UI线程的容器,所以可以理解成在UI线程上同步。

     好处是,程序相对清晰明了,通过消息名称,很容易查到处理过程;

     问题是,计算量大时,需要注意消息频率,否则造成界面假死。

timer:

     目前,大多是用form timer。

     好处是,自动循环触发。

     问题是,客户经常忽略timer间隔变化问题。如果间隔时间很小,有可能kick事件触发的函数没有运行完,新的事件又被触发过来。最简单的方法是在触发处理函数上,stop timer ,结束前再启动timer。

thread:

    好处是,时间和空间一切由自己管理。

    问题是,第一要注意同步,第二是怎样调用UI控件方法。

public void changeStatus()

{

       if (this.InvokeRequired)    //true:当前是自建的线程; false:直接操作吧资源本来就是你的。     

      { 

    //我知道该方法不是我实现的也不需要我实现,我要操控控件,就让控件自己去做吧。

    this.Invoke(new MethodInvoker(this.changeStatus));       //调用UI控件的方法。

            return;       

        }
        progressBar1.Value = _progrssStatus;

        label1.Text = _progrssStatusinfo;

}

很难看是吧?我在自己的工程中使用过1次,就再没用过。