CSkin博客

标题: C#多线程必须加Thread.Sleep()语句么? [打印本页]

作者: chujunhe1234    时间: 2015-9-11 10:18
标题: C#多线程必须加Thread.Sleep()语句么?
a= new Thread(new ThreadStart(delegate { ThreadMethod(); }));
a.Start();
如题,我采用这个方法开启子线程,然后在子线程中执行耗时的代码,并且调用委托来更新UI界面控件。
但是我发现一个问题就是:比如我在代码里写了往textBox里面添加一些字符串,然后后面接着执行耗时的代码。我发现只有当整个代码执行完了,textBox里才会显示添加的数据。但是如果在每条往textBox里添加数据的后面加一句Thread.Sleep()语句,就可以看到是先往textBox里添加的数据了。这点我觉得很奇怪啊,以前安卓开发也遇到过这样的事情,就是往控件里添加数据展示给用户看,如果不加Threa.Sleep()语句的话,就得等数据全部添加完毕之后才能看到,而不是添加一句显示一句,为什么啊?

作者: yhho    时间: 2015-9-11 21:56
本帖最后由 yhho 于 2015-9-11 21:57 编辑

委托里面textBox 赋值后
Application.DoEvents();
作者: 乔克斯    时间: 2015-9-12 15:45
多线程里面写耗时的代码。。操作主界面UI的时候调用主线程委托。耗时代码必须放在多线程块里。不要放到主线程委托块里面。
作者: chujunhe1234    时间: 2015-9-14 17:44
yhho 发表于 2015-9-11 21:56
委托里面textBox 赋值后
Application.DoEvents();

的确有用额。。
作者: chujunhe1234    时间: 2015-9-14 17:44
乔克斯 发表于 2015-9-12 15:45
多线程里面写耗时的代码。。操作主界面UI的时候调用主线程委托。耗时代码必须放在多线程块里。不要放到主线 ...

嗯,最近几天正在研究




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2