一次执行多个线程,如何知道每个线程什么时候结束?

wangsong145 2011-06-23 02:19:40
代码如下:

private void Form1_Load(object sender, EventArgs e)
{
Thread thread1 = new Thread(new ThreadStart(Do1));
thread1.Start();


Thread thread2 = new Thread(new ThreadStart(Do2));
thread2.Start();
}

private void Do1()
{

}

private void Do2()
{

}


我怎么知道线程1和线程2何时结束?
...全文
528 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
老鼠爱上猫 2011-06-25
  • 打赏
  • 举报
回复
转自 http://blog.sina.com.cn/s/blog_5459c700010004y1.html
老鼠爱上猫 2011-06-25
  • 打赏
  • 举报
回复
为了测试获取网页源码,使用C#编写程序,为了最大限度的增加获取的次数,于是采用了多线程的方式,C#中很容易实现多线程,其实现方式与Java的实现方式基本一样,但是在功能上提供的方法更多一些。
在编程的过程中,在主线程中启动了多个线程后,往往想等线程结束后再打印一些统计信息出来,但是可能先执行主线程中的打印语句,后面线程才能结束,这往往不是我们想要的。而如何判断线程执行是否结束呢?可喜的是微软提供了我们这样一个方法,IsAlive()其判断线程是否还在运行状态,所以我们可以在循环中一直判断这个标识,等该线程结束后,退出线程。而我们的程序在执行过程中,可能又要判断是否按下了停止按钮或停止键,按下后,会立刻终止线程,退出程序。所以在while循环中还要判断是否有键盘或鼠标消息,所以在循环判断中,还要处理这些消息,防止while(1)循环一直执行,不再响应消息。所以我们使用了几个BOOL变量,作为标志,通过这些标志,可以判断线程是否结束,是否按下了停止按钮。下面是C#中的相关代码,可以参考。

private bool StartThreads()
{

bool IfTimesEnd = false;

IfRunOver = false;


Thread newThread = new Thread(new ThreadStart(ThreadProc));
newThread.Start();

while (!IfRunOver)
{

IfTimesEnd = newThread.IsAlive;
System.Windows.Forms.Application.DoEvents();
if (!IfTimesEnd || IfRunOver)
{
newThread.Interrupt();
newThread.Abort();
IfTimesEnd = false;
break;
}
}
return !IfTimesEnd;

}

//而主线程中的相关代码为:

while (true)
{
IfTimesEnd = StartThreads();
IfThreadOver = IfTimesEnd && true;
System.Windows.Forms.Application.DoEvents();

if (IfRunOver && IfThreadOver)
{
pt.Stop();
str = "用时:" + pt.Duration + " 秒\n";
richTextBox1.ScrollToCaret();
richTextBox1.AppendText(str);
richTextBox1.Update();
break;
}
}


种草德鲁伊 2011-06-23
  • 打赏
  • 举报
回复


var callback = new Action(() => Console.WriteLine("我结束了"));
Thread thread1 = new Thread(new ParameterizedThreadStart(Do1));
thread1.Start(callback);


private void Do1(object arg)
{
// do something
((Action)arg).Invoke();
}

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧