如果从另外一个线程操作windows窗体上的控件,就会与主线程产生竞争,造成不可预料的后果,甚至死锁。
因此,windows GUI编程有一个规则:
只能通过创建控件的线程来操作控件的数据!
实现方法:
要从线程外操作windows控件,那么就要使用Invoke或BeginInvoke方法,通过一个委托将调用封送到空间所属的线程。
调用格式:
Object^ Invoke ( Delegate^ method );
Delegate 为线程的委托
Object 为正在被调用的委托的返回值,可无返回值。
委托将对方法的引用封装在委托对象中,即委托中封装一个方法,方法通过对象来实现。
Thread^ newthread = gcnew Thread(gcnew ThreadStart(类对象名, &类::函数));
静态方法--->(&类::函数)
实例方法--->(类对象名, &类::函数)