1. ThreadPool 提供线程池的管理
ThreadPool是静态类,无构造函数,其方法都是静态。
a) 主要使用的方法是: QueueUserWorkItem方法
public static bool QueueUserWorkItem(WaitCallback callBack):
将方法排入队列以便执行。此方法在有线程池线程变得可用时执行。
public static bool QueueUserWorkItem(WaitCallback callBack,Object state):
将方法排入队列以便执行,并指定包含该方法所用数据的对象。此方法在有线程池线程变得可用时执行。
b) 控制线程数大小 : SetMaxThreads方法
2. Thread线程处理方式
a) 无参无返回值使用
new Thread(Test).Start(); // test是方法
b)有参无返回值使用
new Thread(new ParameterizedThreadStart(TestHasParamter)).Start(1000); // TestHasParamter是方法、1000是参数
c)无参有返回值使用(需要重写一个方法调用EndInvoke,否则界面出现假死)
// 定义委托
public delegate int myTest();
myTest my = new myTest(TestHasReturn); // TestHasReturn 方法
IAsyncResult res = my.BeginInvoke(null, null);int iRes = my.EndInvoke(res);
d)有参有返回值使用
// 定义委托
public delegate int MyBoth(int iCount);
MyBoth my = new MyBoth(TestHasBoth);
int iCount = 1000;
IAsyncResult res = my.BeginInvoke(iCount , null, null);
int iRes = my.EndInvoke(res);
MessageBox.Show(iRes.ToString());
3.线程操作时出现“线程间操作无效: 从不是创建控件“lstInfo”的线程访问它。”处理
相关链接:http://www.cnblogs.com/luckboy/archive/2010/12/19/1910785.html
a) 使用CheckForIllegalCrossThreadCall=false
示例:
public Form1()
{
InitializeComponent();
//CheckForIllegalCrossThreadCalls = false; // 全部支持
ListBox.CheckForIllegalCrossThreadCalls = false; // 支持某类型控件:ListBox, TextBox
}
b) 利用委托
C)使用BackgroundWorker控件
附录:
1. 多线程编程(3):线程池ThreadPool
http://zhoufoxcn.blog.51cto.com/792419/263696/
http://www.cnblogs.com/GIS_zhou/articles/1839248.html
3.线程初步了解
http://www.cnblogs.com/kissdodog/archive/2013/03/26/2983755.html
4. C#多线程学习 之 线程池[ThreadPool]
http://www.cnblogs.com/henw/archive/2012/01/06/2314870.html