如何等待子线程执行完毕 再继续主线程?
各位好,
本来就是一个单线程程序,
private void btnStartRun_Click(object sender, EventArgs e)
{
CurrentobjCalpuff.selectPoint = alPoint;
CurrentobjCalpuff.selectLine = alLine;
CurrentobjCalpuff.selectArea = alArea;
CurrentobjCalpuff.CreatePuffInp();
CurrentobjCalpuff.StartCalpuff(); //执行时间大约为20分钟
CurrentobjCalpuff.StartCalpost();
}
这样的话vs2005是抱错的,说执行时间不能超过60秒,在网上搜索了一下,说用多线程可以解决这个问题,因此改为:
private void btnStartRun_Click(object sender, EventArgs e)
{
CurrentobjCalpuff.selectPoint = alPoint;
CurrentobjCalpuff.selectLine = alLine;
CurrentobjCalpuff.selectArea = alArea;
CurrentobjCalpuff.CreatePuffInp();
Thread.CurrentThread.Suspend();
Thread thd = new Thread(new ThreadStart(doEvent));
thd.IsBackground = true;
thd.Start();
if (!thd.IsAlive)
{
Thread.CurrentThread.Resume();
}
CurrentobjCalpuff.StartCalpost();
}
private void doEvent()
{
CurrentobjCalpuff.StartCalpuff();
}
可编译时说suspend已过时,且运行时好像没有达到目的,小弟初次接触多线程,不知道如何实现这一要求,望大家提供最简单的方法,解决马上结帖,谢谢!!!!
------解决方案--------------------用 BackgroundWorker 来实现后台线程
MSDN 有详细示例
------解决方案--------------------Thread.Join
------解决方案--------------------阻塞 Jiong
挂起 suspend
------解决方案--------------------thread.Join把指定的线程加入到当前线程,合并为单线程
比如说
thread1.Start();
thread1.Join();
这样的话,当前线程就会等thread1执行完后再执行
具体例子,你查一些MSDN中thread.Join的用法吧
------解决方案--------------------Join()
------解决方案--------------------我有个Splash界面,其中有个初始化的工作,成功才能启动主窗体,下面是主窗体中的代码。
private void StartSplash()
{
while(true)
{
//通过静态变量IniSuccessFlag判断子线程是否执行成功,不成功则继续等待
if(fmSplash.IniSuccessFlag == false)
{
Thread.Sleep(2000);
}
else
{
你自己的操作。。。。。。
}
}
}
------解决方案--------------------挂起 suspend
------解决方案--------------------如果没记错的话,thread是有一个complete事件的,如果没有backgroundworker肯定是有的
你把CurrentobjCalpuff.StartCalpost();防在事件中执行