//最重要的注意点是,你无法脱离创建控件的线程,而在其他自己创建的线程中操作常用控件(如Label控件)。
//必须采用文中介绍的方法,废话不说,直接上代码:
//两个线程的累加器,通过Label显示结果,运行效果图:
上面的this.Invoke(ul1);就是保证在主线程中调用设置label文本的操作,如果把这个操作换成直接在我们创建的线程的操作就会随机产生错误(运行时也会报错,上面的解决方案较为直观)。下面介绍引进老外写的一个ControlInvoker类,也是解决这个问题的,看起来更优美。
然后我最上面的代码可以修改如下: