offerfinder
雪小影
2015-09-11 02:15
采纳率: 77.8%
浏览 4.3k

C#多线程必须加Thread.Sleep()语句么?

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • yangbo50304
    yangbo50304 2015-09-11 05:58
    已采纳

    小伙子,在工作线程中去刷新UI,就是调用UI线程的东西的话,如果你想要做到同步的效果,可以使用Invoke就可以。异步效果的话,就是BeginInvoke,至于怎么调用,不用我举例子吧。
    http://wenku.baidu.com/link?url=hz6vSo2MVAX9NLB4LjSq_ajQg-EVQMsbOpVid-ut3aSxn0_3Vj_yjoUtV8RgkCg2SaZjFSMloxQon5LDEfu7kRQaKXNAG-GsTeCscmZIoQu

    点赞 评论
  • caozhy

    你根本一点概念都没有。首先工作线程不应该直接更新界面,需要用invoke传委托让界面处理。
    其次,你更新界面的代码,应该不要包括耗时的操作,否则又相当于单线程了。
    最后,thread.sleep只能阻塞进程,适得其反。

    点赞 评论

相关推荐