C# 如何判断子线程全部结束???急急急 比如现在有20个子线程和一个主线程。怎么判断20个子线程已经运行完毕,在主线程中打印任务执行完毕! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是否可以用join()?主线程等待子线程运行完再执行 那你就在进程看还在运行没的 System.Diagnostics.Process[] allProcess = System.Diagnostics.Process.GetProcesses(); foreach (System.Diagnostics.Process thisprocess in allProcess) { string processName = thisprocess.ProcessName; if (processName.ToLower() == "进程名字") { try { //执行没结束的操作 } catch (Exception e) { MessageBox.Show(e.Message); return; } } } 如果是.Net4可以用CountDownEvent等,写法最简单。以前版本可以用回调,用事件(见例子),等等。int threads;private void button1_Click(object sender, EventArgs e){ int threadCount = threads = 4; AutoResetEvent eventFinished = new AutoResetEvent(false); for (int i = 0; i < threadCount; i++) { ThreadPool.QueueUserWorkItem(state => { Thread.Sleep(Math.Abs(Guid.NewGuid().GetHashCode()) % 1000); if (Interlocked.Decrement(ref this.threads) == 0) { (state as AutoResetEvent).Set(); } }, eventFinished ); } eventFinished.WaitOne(); //执行完毕 } .net 4.0 还可以用Taskvar array = Enumerable.Range(1, 10);var factory = new TaskFactory();var tasks = new List<Task>();foreach (var i in array){ Action<object> action = obj => { Thread.Sleep(1000); Console.WriteLine(obj); }; tasks.Add(factory.StartNew(action, i));}//异步等待全部完毕//factory.ContinueWhenAll(tasks.ToArray(), ts => { MessageBox.Show("all over"); });//同步等待全部通知Task.WaitAll(tasks.ToArray());MessageBox.Show("all over"); 目前是.net3.5版本,求高手解决。用计数器貌似也行不通。高手能详细点不?谢谢 求心形曲线方程。就是长长得和心脏的那种闭合曲线 高分请教ClickOnce 客户端出现“无法继续,此应用程序格式不正确” 如何按时间范围一次性筛选出一个目录的的文件 C#中 == ,Equals ,ReferenceEquals有什么区别? 请问关于文件夹的问题? Monitor.wait()和pulse()对于Xeon的问题! 如何一直保留从url传来的变量? C# 程序路径 请教,这段图片移动代码哪里出问题了。 图片不能移动。 DataGrid控件在编辑模式是,使用验证控件的问题 上下文对象 [求助!]C#禁止指定进程访问网络
foreach (System.Diagnostics.Process thisprocess in allProcess)
{
string processName = thisprocess.ProcessName;
if (processName.ToLower() == "进程名字")
{
try
{
//执行没结束的操作
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return;
}
}
}
以前版本可以用回调,用事件(见例子),等等。int threads;
private void button1_Click(object sender, EventArgs e)
{
int threadCount = threads = 4;
AutoResetEvent eventFinished = new AutoResetEvent(false);
for (int i = 0; i < threadCount; i++)
{
ThreadPool.QueueUserWorkItem(state =>
{
Thread.Sleep(Math.Abs(Guid.NewGuid().GetHashCode()) % 1000);
if (Interlocked.Decrement(ref this.threads) == 0)
{
(state as AutoResetEvent).Set();
}
},
eventFinished
);
} eventFinished.WaitOne();
//执行完毕
}
var array = Enumerable.Range(1, 10);
var factory = new TaskFactory();
var tasks = new List<Task>();
foreach (var i in array)
{
Action<object> action = obj =>
{
Thread.Sleep(1000);
Console.WriteLine(obj);
};
tasks.Add(factory.StartNew(action, i));
}
//异步等待全部完毕
//factory.ContinueWhenAll(tasks.ToArray(), ts => { MessageBox.Show("all over"); });//同步等待全部通知
Task.WaitAll(tasks.ToArray());
MessageBox.Show("all over");