C# 多线程处理相关说明: WaitHandle,waitCallback, ThreadPool.QueueUserWorkItem
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("第三个线程", , waitHandles[]); // 增加自定义的线程参数类型 ThreadPool.QueueUserWorkItem(waitCallback2, myState);
ThreadPool.QueueUserWorkItem(waitCallback2, new MyState("第四个线程", , waitHandles[])); 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();
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();
((MyState)state).Number += ; // 将 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# 多线程处理相关说明: WaitHandle,waitCallback, ThreadPool.QueueUserWorkItem的更多相关文章
- C#线程池ThreadPool.QueueUserWorkItem接收线程执行的方法返回值
最近在项目中需要用到多线程,考虑了一番,选择了ThreadPool,我的需求是要拿到线程执行方法的返回值, 但是ThreadPool.QueueUserWorkItem的回调方法默认是没有返回值的,搜 ...
- 多线程操作(ThreadPool.QueueUserWorkItem
主线程: private void GetPolicy_Load(object sender, EventArgs e) { ////ThreadPool.QueueUserWorkItem(new ...
- Parallel.ForEach , ThreadPool.QueueUserWorkItem
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题
ThreadPool是.net System.Threading命名空间下的线程池对象.使用QueueUserWorkItem实现对异步委托的先进先出有序的回调.如果在回调的方法里面发生异常则应用程序 ...
- 合理使用线程池 ThreadPool.QueueUserWorkItem()
//==>自建线程 new Thread(() => { //线程任务 Console.WriteLine(Thread.CurrentThread.ManagedThreadId); } ...
- 难道调用ThreadPool.QueueUserWorkItem()的时候,真是必须调用Thread.Sleep(N)吗?
开门见山,下面的例子中通过调用ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state)的方式实现异步调用: 1: class ...
- ThreadPool.QueueUserWorkItem 简单示例,显示当前时间
1.线程池 添加方法 作为一个线程运行 class Program { static void Main(string[] args) { ThreadPool.QueueUserWorkItem( ...
- ThreadPool.QueueUserWorkItem的用法
代码: ThreadPool.SetMaxThreads(, ); ThreadPool.QueueUserWorkItem((obj) => { MessageBox.Show("执 ...
- ThreadPool.QueueUserWorkItem的性能问题
在WEB开发中,为了降低页面等待时间提高用户体验,我们往往会把一些浪费时间的操作放到新线程中在后台执行. 简单的实现代码就是: //代码一 new Thread(()=>{ //do somet ...
随机推荐
- C++中关于类型转换的问题讨论
这里以signed/unsigned char, signed/unsigned short, signed/unsigned int类型为例, 讨论一下基本类型转换的基本原理,这样我们在编程中碰到由 ...
- C# 对Excel文档打印时的页面设置
1.对打印页面的朝向,页宽,页高进行设置 参考源码[1] using Excel = Microsoft.Office.Interop.Excel; Excel.Application tmpExce ...
- php 采集程序 宋正河
本程序主要是通过php采集网页信息,程序自动存储采集进度,采用phpquery简化元素节点匹配,采集到的内容直接入库 你要做的只是写好采集语法,本程序适合有一定php基础的人使用!当然你也可以进行修改 ...
- 关于python中的__new__方法
在上篇中,简单的比较了下new方法和init方法,然后结合网上的东西看了一点,发现..看书有的时候说的并不全面. __new__方法是一个类方法,主要作用是来指导如何生成类的实例, 主要用于,当需要生 ...
- JavaScript中,{}+{}等于多少?
最近,Gary Bernhardt 在一个简短的演讲视频“Wat”中指出了一个有趣的 JavaScript 怪癖: 在把对象和数组混合相加时,会得到一些意想不到的结果. 本篇文章会依次讲解这些计算结果 ...
- Code-first示例
首先创建一个空数据库 在vs2013中添加数据库类,按提示操作一直下一步 添加完以后,数据库类的代码 namespace mvctest.Models { using System; using ...
- Hive QL
转自http://www.alidata.org/archives/581 Hive 的官方文档中对查询语言有了很详细的描述,请参考:http://wiki.apache.org/hadoop/Hiv ...
- about云资源共享
Nosql资源: http://www.aboutyun.com/thread-5655-1-1.html (1)redis安置(2)RedisAdminUI.zip(3)redis安装部署(4) ...
- 消除QQ表情小游戏
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- hdu4135-Co-prime & Codeforces 547C Mike and Foam (容斥原理)
hdu4135 求[L,R]范围内与N互质的数的个数. 分别求[1,L]和[1,R]和n互质的个数,求差. 利用容斥原理求解. 二进制枚举每一种质数的组合,奇加偶减. #include <bit ...