日期:2014-05-18  浏览次数:21129 次

怎么让子线程结束后继续主线程?
一个界面程序中的一段: 大意这样

string[] data;

ThreadStart start = new ThreadStart(ana0);
Thread download = new Thread(start);
download.Start(); //启动一个网页下载的线程,时间未知,下载数据保存到data里

ThreadStart start2 = new ThreadStart(ana1);
Thread download2 = new Thread(start2);
download2.Start();//做个多线程吧

//这里应该怎么写?


fenxi(data);//分析data的数据

为了让系统UI不死掉,我不能在fenxi前面轮询查看线程是否结束,那我应该怎么让线程结束了以后自动启动fenxi(data)?

------解决方案--------------------
应该可用,参考:

http://www.ryanvice.net/wpf-3-5/using-backgroundworker-with-wpf/
------解决方案--------------------
探讨

确实啊。。。我发现了程序UI卡死了
怎么办呢?
我做的WPF 是不是也有backgrounder
引用:

这个怎么会可以呢?WaitOne()一直要等到Set()之后才会继续下面的操作,等于被阻塞。
应该用异步来实现。最简单的是winform里的backgroundworker,在Completed事件中可进行fenxi(data);

------解决方案--------------------
不要纠结于“继续主线程”这个词儿!

你的fenxi方法不一定执行在哪一个线程中,完全可以使用某一个download所使用的线程。假设你之前的观念就是“一定要在主线程中执行”,那么就纠结了。

实际上,任何计算工作都无需主线程去执行(当然无不是说就必须使用子线程)。如果你这样去设计程序,就可以选择最为恰当的流程。
------解决方案--------------------
使用事件吧,每个子线程的运行进度(该子线程一共需要下载多少内容,已经下载了多少内容等)全部通过事件反馈出来,
然后在主线程中绑定此事件即可,具体代码可参考事件使用方法