多线程 执行 多任务
来源:互联网 发布:为尔商城是传销网络吗 编辑:程序博客网 时间:2024/04/28 08:28
今天刚刚把自动更新程序写完,说下多线程执行多任务的思路。
如果有错误请大家指证!
我的这个程序是可以自己设定线程数目的,点击按钮执行多线程任务。
下面开始
1:我先把每个任务都写成用户控件,在用户控件里存储要执行的信息,并可以单独执行该任务。
2:使用线程池控制每个任务。
3:每个线程结束判断并触发执行下个任务。
下面看代码吧。
//开线程
ThreadObject = new Thread[ProgressArrayLength];
if (Thread_Num <= ProgressArrayLength)
{
for (int j = 0; j < Thread_Num; j++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(((UserProgressbar)ProgressbarPanel.Controls[j]).ExecUpdate));
ThreadNow_Num++;
ThreadID++;
}
}
else
{
for (int j = 0; j < ProgressArrayLength; j++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(((UserProgressbar)ProgressbarPanel.Controls[j]).ExecUpdate));
ThreadNow_Num++;
ThreadID++;
}
}
用户控件里定义了委托用于通知主线程该任务是否执行完成
public delegate void ProgressComplete(bool IsComplete);
public event ProgressComplete Progress_Completed;
先在主线程中添加
((UserProgressbar)ProgressBarName[ArrayID]).Progress_Completed += new UserProgressbar.ProgressComplete(Auto_Update_Progress_Completed);
然后在委托中启动下一个任务的线程
//委托事件
void Auto_Update_Progress_Completed(bool IsComplete)
{
Mt.WaitOne();
if (IsComplete)
{
ThreadID = ThreadID - 1;
while (ThreadID < Thread_Num && ThreadNow_Num < ProgressArrayLength)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(((UserProgressbar)ProgressbarPanel.Controls[ThreadNow_Num]).ExecUpdate));
ThreadID++;
ThreadNow_Num++;
}
}
Mt.ReleaseMutex();
}
说的有点简单,请大家不要见怪。
基本上就是这个思路了,如果谁还有更好的思路请回复一下,大家一起讨论讨论。
- 多线程 执行 多任务
- 多线程执行定点任务
- 简单多线程执行任务
- 多线程执行任务-举例
- 多线程中任务的执行
- 多线程执行任务模板实例
- Java多线程交替执行任务
- c#中任务工厂执行多线程任务
- 多线程执行任务等待所有任务执行完毕
- Java多线程之任务执行架构
- Java多线程之任务执行架构
- 【Python】使用 multiprocessing.dummy 执行多线程任务
- Java多线程--任务执行(线程池)
- 多线程执行job任务 线程池
- 【转】使用 multiprocessing.dummy 执行多线程任务
- AsyncTask多任务执行
- 多任务和多线程
- 多任务处理:多线程
- 家常排毒食品
- Thread类与Runnable接口
- 关于CInternetSession缓存问题
- CodeFile 与 CodeBehind 的区别
- Shell 条件判断总结
- 多线程 执行 多任务
- 备份NE80E的配置文件
- 该用notify方法还是notifyAll方法
- UNION
- 蓝牙协议的命令和事件
- Spring之Hello World
- 网站成功的三十三个法则
- tomcat接受请求并做出响应的流程
- Safari 4