线程1开的子线程可以用一个线程(池)来代替,OnButton1_Click()在实现的时候告诉线程池:“上帝,给我来一个线程吧,我要……”
个人感觉搞错了方向,可能的原因有2种
1、死锁,可能性不大,因为并不是每次都不行;
2、工作线程执行了更新界面的操作,且通过调用引用控件的方法来更新的。因为控件方法调用实际上是SendMessage,应该用PostMessage就不会错了。
考虑如下情况:
按下按钮,界面线程执行OnButton,等待工作者线程释放锁;
在同一时刻工作者线程更新界面,因为任何界面更新实际上都是界面线程完成(通过消息队列),如果用的是SendMessage模式,工作者线程必须等待完成才可以走一下步,而等待完成的前提是OnButton完成。
这样就OnButton在等待锁,工作者线程在等待OnButton完成才可以释放锁,无响应了,所以工作者线程更新,应该用PostMessage。