1. 在你的线程方法中,return 前去加个标志
2. 不想再每个方法后面加,就创建一个基类通过判断线程状态来获得线程方法的状态是个极度不靠谱的方法。
2. 不想再每个方法后面加,就创建一个基类通过判断线程状态来获得线程方法的状态是个极度不靠谱的方法。
解决方案 »
- 如何用DevExpress制作MenuStrip下拉菜单栏
- 无法打开计算机“.”上的服务控制管理器。此操作可能需要其他特权。
- 同步Lock()
- 请教有关winform下水晶报表的问题。
- if和while的混乱
- 请各位帮我看下这个程序
- 我常用C#+MSSQL开发数据库应用方面的WINFORM程序,感到.NET开的程序运行太慢,数据库开发及报表方面的功能也不强大也不方便,现在想转学D
- 一个关于SQL的简单问题
- 关于Aspose.Excel.dll
- C#中怎么判断局域网连接
- 请教一个关于HttpWebResponse的问题!!!------高手请进!!!!
- 程序员只能做到35岁的真正原因!欢迎拍砖!
{
//定义同步事件
AutoResetEvent[] events =
{
new AutoResetEvent(false),
new AutoResetEvent(false),
new AutoResetEvent(false),
new AutoResetEvent(false)
}; Action notify = delegate
{
//通知,等待全部完成才输出信息
if (WaitHandle.WaitAll(events, 0))
{
Console.WriteLine("All threads finished");
}
}; //线程,把你的处理代码放在这里
WaitCallback wcb = (status) =>
{
//to do, you time cost codes
Random r = new Random((int)DateTime.Now.Ticks);
Thread.Sleep(r.Next(100,1000));
Console.WriteLine("Thread finished");
//Event置位,表明处理完成
AutoResetEvent are = status as AutoResetEvent;
are.Set();
//通知
notify();
};
//放入线程池,每个Thread关联一个AutoResetEvent
foreach (AutoResetEvent are in events)
{
ThreadPool.QueueUserWorkItem(wcb, are);
}
}
做到捕获所有子线程已经结束了。然后。再执行下面报Msg 当然这里你并不要另外再开线程,用while对条件进行限制就可以达到你要的效果
随手写了个你看一下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace MyNewsReader.UI
{
public partial class Form1 : Form
{
BackgroundWorker worker = new BackgroundWorker();
public Form1()
{
InitializeComponent();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);//后台线程开始
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);//后台线程结束
} void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("线程结束");
} void worker_DoWork(object sender, DoWorkEventArgs e)
{
//执行你要执行的内容
DowWorkTest();
} private void DowWorkTest()
{
//这里你可以写你想要做的效果
int i = 0;
while (i < 100)
{
i++;
}
}
}
}