问题描述
- C#多线程必须加Thread.Sleep()语句么?
- a= new Thread(new ThreadStart(delegate { ThreadMethod(); }));
a.Start();
如题,我采用这个方法开启子线程,然后在子线程中执行耗时的代码,并且调用委托来更新UI界面控件。
但是我发现一个问题就是:比如我在代码里写了往textBox里面添加一些字符串,然后后面接着执行耗时的代码。我发现只有当整个代码执行完了,textBox里才会显示添加的数据。但是如果在每条往textBox里添加数据的后面加一句Thread.Sleep()语句,就可以看到是先往textBox里添加的数据了。这点我觉得很奇怪啊,以前安卓开发也遇到过这样的事情,就是往控件里添加数据展示给用户看,如果不加Threa.Sleep()语句的话,就得等数据全部添加完毕之后才能看到,而不是添加一句显示一句,为什么啊?
解决方案
小伙子,在工作线程中去刷新UI,就是调用UI线程的东西的话,如果你想要做到同步的效果,可以使用Invoke就可以。异步效果的话,就是BeginInvoke,至于怎么调用,不用我举例子吧。
http://wenku.baidu.com/link?url=hz6vSo2MVAX9NLB4LjSq_ajQg-EVQMsbOpVid-ut3aSxn0_3Vj_yjoUtV8RgkCg2SaZjFSMloxQon5LDEfu7kRQaKXNAG-GsTeCscmZIoQu
解决方案二:
你根本一点概念都没有。首先工作线程不应该直接更新界面,需要用invoke传委托让界面处理。
其次,你更新界面的代码,应该不要包括耗时的操作,否则又相当于单线程了。
最后,thread.sleep只能阻塞进程,适得其反。
时间: 2024-09-16 06:31:15