最近接触C#的一个项目,里面用到了多线程处理,这里做个备忘
class TestThread
{
static void Main()
{
//使用WaitHandle静态方法阻止一个线程,直到一个或多个同步对象接收到信号
WaitHandle[] waitHandles = new WaitHandle[]
{
new ManualResetEvent(false),
new ManualResetEvent(false)
};
WaitCallback waitCallback = new WaitCallback(MyThreadWork);
WaitCallback waitCallback2 = new WaitCallback(MyThreadWork2); // 增加线程工作类型
ThreadPool.QueueUserWorkItem(waitCallback, "第一个线程");
ThreadPool.QueueUserWorkItem(waitCallback, "第二个线程");
MyState myState = new MyState("第三个线程", 100, waitHandles[0]); // 增加自定义的线程参数类型
ThreadPool.QueueUserWorkItem(waitCallback2, myState);
ThreadPool.QueueUserWorkItem(waitCallback2, new MyState("第四个线程", 2, waitHandles[1]));
WaitHandle.WaitAll(waitHandles);
Console.WriteLine("MyState 的 Number 值为: {0}", myState.Number); // 读取线程改变后的 MyState
}
public static void MyThreadWork(object state)
{
Console.WriteLine("MyThreadWork 开始启动 …… {0}", (string)state);
Thread.Sleep(1000);
Console.WriteLine("运行结束…… {0}", (string)state);
}
// use MyState class
public static void MyThreadWork2(object state)
{
MyState myState = ((MyState)state);
Console.WriteLine("MyThreadWork2 开始启动…… {0},{1}", ((MyState)state).Info, ((MyState)state).Number);
Thread.Sleep(1000);
((MyState)state).Number += 1; // 将 state的 Number 加 1
Console.WriteLine("运行结束…… {0},{1}", ((MyState)state).Info, ((MyState)state).Number);
((ManualResetEvent)myState.DoneEvent).Set();
}
}
public class MyState
{
private string info;
private int number;
private WaitHandle _doneEvent;
public MyState(string info, int number, WaitHandle doneEvent)
{
this.info = info;
this.number = number;
this._doneEvent = doneEvent;
}
public string Info
{
get
{
return this.info;
}
set
{
this.info = value;
}
}
public WaitHandle DoneEvent
{
get
{
return this._doneEvent;
}
}
public int Number
{
get
{
return this.number;
}
set
{
this.number = value;
}
}
}

C#多线程实践
本文介绍了一个C#多线程应用案例,演示了如何使用WaitHandle和ThreadPool来协调多个线程的工作流程,并通过自定义状态类传递复杂的状态信息。
2457

被折叠的 条评论
为什么被折叠?



