winform程序是单线程的。
/// <summary>
/// 应用程序入口
/// </summary>
[STAThread]
static void Main()
而且对某一个控件来说,只有创建该控件的线程才能修改它的值。比如我们在设计器中拖到窗体上的控件,它们由程序的主线程创建,那么如果我们在执行中又创建了另外一个线程,那么我们在这个新创建的线程中无法直接修改窗体上控件的值。
有时候我们的winform程序在某一个处理上可能要会费大量的时间,这个时候我们可能会想用另一个线程来处理这个长时间的任务,而同时我 们可以做一些其它的事情。.net里面多线程异步处理可以使用ThreadPool.QueueUserWorkItem, BackgoundWorder等就可以非常简单地实现。就像上面图中显示的那样,在点击了按钮之后,我们希望异步地执行按钮的处理程序:

WinForm程序中的控件只能由创建它的线程修改。当需要在新线程中更新控件,如进度条,直接操作会导致线程安全问题。通过使用Control.Invoke方法,可以通知控件的创建线程进行修改,从而实现跨线程更新。Invoke提供了带参数的方法,方便传递更新进度所需的数据。

最低0.47元/天 解锁文章
1189





