C# 线程池中的线程都执行后,执行主线程中输出
2009-02-23 18:18
423 查看
没啥说的,直接上代码。
using System;
using System.IO;
using System.Security.Permissions;
using System.Threading;
public enum DatabaseType
{
Business,
System
}
class DataTransValue
{
public DatabaseType DatabaseType;
public string TableName = "";
public string Type = "";
public AutoResetEvent MainEvent;
public DataTransValue(DatabaseType databaseType, string tableName, string type)
{
DatabaseType = databaseType;
TableName = tableName ;
Type = type ;
}
}
class Test
{
public void DataTrans(object value)
{
Thread t = Thread.CurrentThread;
DataTransValue selfDataTrans = (DataTransValue)value;
Console.WriteLine("ThreadCode{0}/t databaseType{1}/t tableName{2}/t type{3}/t",
t.GetHashCode(), selfDataTrans.DatabaseType.ToString(), selfDataTrans.TableName, selfDataTrans.Type);
Thread.Sleep(100);
selfDataTrans.MainEvent.Set();
}
static void Main()
{
AutoResetEvent[] MainEvent = new AutoResetEvent[50];
Test test = new Test();
for (int i = 0; i < 50; i++)
{
DataTransValue tt = new DataTransValue(DatabaseType.Business, "TestTablename", "TestType");
MainEvent[i] = new AutoResetEvent(false);
tt.MainEvent = MainEvent[i];
ThreadPool.QueueUserWorkItem(new WaitCallback(test.DataTrans), tt);
}
WaitHandle.WaitAll(MainEvent);
Console.WriteLine("完成");
Console.Read();
}
}
using System;
using System.IO;
using System.Security.Permissions;
using System.Threading;
public enum DatabaseType
{
Business,
System
}
class DataTransValue
{
public DatabaseType DatabaseType;
public string TableName = "";
public string Type = "";
public AutoResetEvent MainEvent;
public DataTransValue(DatabaseType databaseType, string tableName, string type)
{
DatabaseType = databaseType;
TableName = tableName ;
Type = type ;
}
}
class Test
{
public void DataTrans(object value)
{
Thread t = Thread.CurrentThread;
DataTransValue selfDataTrans = (DataTransValue)value;
Console.WriteLine("ThreadCode{0}/t databaseType{1}/t tableName{2}/t type{3}/t",
t.GetHashCode(), selfDataTrans.DatabaseType.ToString(), selfDataTrans.TableName, selfDataTrans.Type);
Thread.Sleep(100);
selfDataTrans.MainEvent.Set();
}
static void Main()
{
AutoResetEvent[] MainEvent = new AutoResetEvent[50];
Test test = new Test();
for (int i = 0; i < 50; i++)
{
DataTransValue tt = new DataTransValue(DatabaseType.Business, "TestTablename", "TestType");
MainEvent[i] = new AutoResetEvent(false);
tt.MainEvent = MainEvent[i];
ThreadPool.QueueUserWorkItem(new WaitCallback(test.DataTrans), tt);
}
WaitHandle.WaitAll(MainEvent);
Console.WriteLine("完成");
Console.Read();
}
}
相关文章推荐
- c# 线程池中的所有线程结束之后执行的事件
- 【多线程】 Future Callable 使用(线程池线程执行完,执行主线程)
- C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定
- C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定
- spring线程池,全部执行完子线程在执行主线程
- C# 多线程join的用法,等待多个子线程结束后再执行主线程
- C# 主线程 辅助线程
- Java主线程等待所有子线程执行完毕再执行解决办法集
- C#/.NET主线程与子线程之间的关系
- C# 子线程调用主线程窗体的解决方法
- C#线程并发执行,自我感觉比较好,用到的地方很多
- 面试必问!Java 多线程中两个线程交替执行,一个输出偶数,一个输出奇数
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- C# 线程池执行操作例子
- java子线程全部执行完毕执行主线程代码
- C# 高定位高效率程序中 线程与线程池比较
- C# 线程调用主线程中的控件
- 等待线程池内线程执行完成的一种方法
- Java等线程池执行完所有任务后再执行主线程
- 主线程中使用join等待所有子线程执行结束