码迷,mamicode.com
首页 > 编程语言 > 详细

线程操作学习20150905

时间:2015-09-05 22:19:28      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

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/

2.C#多线程编程总结

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

线程操作学习20150905

标签:

原文地址:http://www.cnblogs.com/liulvfeng/p/4783961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!