在程序中,我开启了10个线程,我想在规定时间后去检查 还剩余几个线程未执行.怎么做?
上代码,哈哈,谢谢了
上代码,哈哈,谢谢了
解决方案 »
- 菜鸟问题:如何使textbox在程序运行时默认不聚焦
- C# 挂机 串口不断的发送命令(轮循)每个命令之间间隔50毫秒
- c#自动进位问题
- c# 如何实现自动按F5 获知按指定键的功能!
- 谁有关于 线程进程 这方面知识比较具体的资料啊
- 谁能帮我看一下这段代码到底什么意思?帮我释一下好吗(详细点)?谢谢了!我看的不是太明白!
- 原先的MSDN文档没了,今天去其他机子上拷了一份放在同样的地方,在.net里面认不到,特此求救!
- 问一下程序员和软件开发工程师有区别吗?
- 哪位老大赶快近来帮个忙啊,在线急等!!!
- 请问有关DotNetBar的问题!急,在线等待
- 如何让WebBrowser控件滚动条永远处于最后一行
- xml文件重新加载,报错“无法找到文件名”(其实文件存在)
{ NewTaskDelegate task = newTask;
IAsyncResult asyncResult = task.BeginInvoke(2000, null, null);
while (!asyncResult.IsCompleted)
{
Console.Write("*");
Thread.Sleep(100);
} // 由于异步调用已经完成,因此, EndInvoke会立刻返回结果
int result = task.EndInvoke(asyncResult);
Console.WriteLine(result); }
//线程结束
Interlocked.Decrement(ref TASKCOUNT) ;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Data.SqlClient;
using System.Data;namespace ConApp
{
class Program
{
static void Main(string[] args)
{
for (int index = TASKCOUNT; --index >= 0; )
{
ThreadPool.QueueUserWorkItem(Run,index); Thread.Sleep(new Random(Guid.NewGuid().GetHashCode()).Next(100, 500));
}
wait.WaitOne(); Console.WriteLine("任意键结束....");
Console.ReadKey();
} static ManualResetEvent wait = new ManualResetEvent(false); static int TASKCOUNT = 100; static void Run(object obj)
{ Thread.CurrentThread.Name = obj.ToString(); Thread.Sleep(new Random(Guid.NewGuid().GetHashCode()).Next(4000, 5000));
if (Interlocked.Decrement(ref TASKCOUNT) == 0)
{
wait.Set();
}
else
{
Console.WriteLine("完成{0}", obj);
}
}
}
}
我换成TASKCOUNT了,执行了一下.还是不对啊.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Data.SqlClient;
using System.Data;namespace ConApp
{
class Program
{
static void Main(string[] args)
{
for (int index = TASKCOUNT; --index >= 0; )
{
ThreadPool.QueueUserWorkItem(Run, index); Thread.Sleep(new Random(Guid.NewGuid().GetHashCode()).Next(100, 500));
}
wait.WaitOne(); Console.WriteLine("任意键结束....");
Console.ReadKey(); } static ManualResetEvent wait = new ManualResetEvent(false); static int TASKCOUNT = 100; static void Run(object obj)
{ Thread.CurrentThread.Name = obj.ToString(); Thread.Sleep(new Random(Guid.NewGuid().GetHashCode()).Next(4000, 5000));
if (Interlocked.Decrement(ref TASKCOUNT) == 0)
{
wait.Set();
}
else
{
Console.WriteLine("还有{0}个未完成", TASKCOUNT);
}
}
}
}
返回true,表示线程还在执行,false已经完成
通过Thread.IsAlive可以知道线程是否在执行,不过是完成还是被中止就不一定了,相比之下Thread.ThreadState可以提供更多的信息。Task则可以用IsCompleted获得是否完成
2.不用线程,用BackgroundWorker并注册WorkComplete事件
是Thread,上段代码 看看