C# 使用线程池,设置每个线程的执行时间,过了时间强制结束

ThreadPool.QueueUserWorkItem(new WaitCallback(getHtmlContent), nRow);
因为getHtmlContent方法会执行很长时间。所以想要设置一个计时器,当前线程执行30秒后自动结束,找了很久,没有找到解决办法,希望有能力的帮忙解决下

改用thread来驱动这个方法
先建一个类下面的成员,来存放进程
List<Thread> pool = new List<Thread>();
在需要启动你的方法的时候建进城
Thread t = new Thread(new ThreadStart(getHtmlContent));
pool.Add(t);
t.Start();
给类加一个Timer
System.Timers.Timer timer = new Timer();
timer.Interval = 30000;
timer.Elasped += new EventHandler(this. timerElapsed);
timer.Enabled = true;
timer.Start();

然后增加timer的事件处理
private void timerElapsed(object sender, EvenArgs e)
{
//终止进程
foreach(Thread t in pool)
if(t != null && t.IsAlive)
if(!t.Join(5)) t.Abort();
}
温馨提示:内容为网友见解,仅供参考
无其他回答

C# 使用线程池,设置每个线程的执行时间,过了时间强制结束
先建一个类下面的成员,来存放进程 List<Thread> pool = new List<Thread>();在需要启动你的方法的时候建进城 Thread t = new Thread(new ThreadStart(getHtmlContent));pool.Add(t);t.Start();给类加一个Timer System.Timers.Timer timer = new Timer();timer.Interval = 30000;timer.Elaspe...

C# 使用线程池设置每个线程的执行时间,怎样设置结束时间?
先建一个类下面的成员,来存放进程。List<Thread> pool = new List<Thread>();Thread t = new Thread(new ThreadStart(getHtmlContent));pool.Add(t);t.Start();给类加一个Timer。System.Timers.Timer timer = new Timer();timer.Interval = 30000;timer.Elasped += new EventHandler(this. ...

C# Threading.Timer 当执行的代码量很多的时候,如何实现
一般如果在主线程中timer的事件处理程序时间超过100ms,或者是它计时的1\/10长度的话,程序都会有点卡。所以最好是用其它线程处理这一个项目

C# 使用线程池设置每个线程的执行时间,怎样设置结束时间?
先建一个类下面的成员,来存放进程 List<Thread> pool = new List<Thread>();在需要启动你的方法的时候建进城 Thread t = new Thread(new ThreadStart(getHtmlContent));pool.Add(t);t.Start();给类加一个Timer System.Timers.Timer timer = new Timer();timer.Interval = 30000;timer.Elaspe...

请问C#中使用线程池,这样的使用方式(下图)正确吗?后台有三个方法需要...
在多线程的程序中,经常会出现两种情况:1. 应用程序中线程把大部分的时间花费在等待状态,等待某个事件发生,然后给予响应。这一般使用 ThreadPool(线程池)来解决。2. 线程平时都处于休眠状态,只是周期性地被唤醒。这一般使用 Timer(定时器)来解决。ThreadPool 类提供一个由系统维护的线程池(可以...

C#管理大量耗时的线程,内存占用严重
挂接”的线程池中的空闲线程上即可以执行你要的操作。而且,额外的好处是你根本不用去管理线程池中的线程(真正的“零”管理)4)处理“耗时的操作”特别是涉及诸如Socket I\/O 耗时操作,最佳的处理方法是利用后台线程(如果需要,同时配合以自定义事件event),这是增加用户体验不二法门哦~~...

c#启动和结束线程的问题
这样情况下线程很快会被用光的。ASP.net的页面处理全部依赖于线程池,而线程池中线程的数目和创建数量都是有限制的。2.一个线程应该有穷,也就是说执行完毕就应该退出而不应该长期占用资源(除了主线程),所以在Session_End中销毁是不好的设计,也会导致异常的抛出。

c#线程池如何控制并发最大线程数
使用线程池的时候,有时候需要考虑服务器的最大线程数目和程序最快执行所有业务逻辑的取舍。并非逻辑线程越多也好,而且新的逻辑线程必须会在线程池的等待队列中等待 ,直到线程池中工作的线程执行完毕,才会有系统线程取出等待队列中的逻辑线程,进行CPU运算。2. 解决问题:如果不考虑服务器实际可支持的...

C#网络编程与多线程的疑问,求指点
1、这种情况下,多线程当然是要把最占用时间的步骤,以及循环的部分,放到线程里。2、其他线程的代码无法直接操作UI线程里的控件。需要使用委托。你具体的需求我不是很清楚。但是我在这里假设一个例子:比如我有个买票的程序,必须每隔2秒,去服务器请求门票的剩余数量。显示在界面上。界面上还有诸如“...

C#的 Task,Thread,ThreadPool 之间有什么异同
后台线程:主程序执行完毕后就退出,不管线程是否执行完毕。ThreadPool默认为后台线程 线程消耗:开启一个新线程,线程不做任何操作,都要消耗1M左右的内存 ThreadPool为线程池,其目的就是为了减少开启新线程的消耗(使用线程池中的空闲线程,不必再开启新线程),以及统一管理线程(线程池中的线程执行完毕后...

相似回答