线程操作学习20150905

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

时间: 2024-10-13 05:59:27

线程操作学习20150905的相关文章

线程基础:线程(2)——JAVA中的基本线程操作(上)

文章注明来源:http://blog.csdn.net/yinwenjie,主要供自己学习转载用 1.JAVA中线程的状态 1-1.#对象锁 在Java中每一个对象都有一把‘锁’,这个‘锁’可以是开放状态:也可以由某一个线程(或者多个线程)持有‘钥匙’:一旦在系统中某个对象的‘锁’存在至少一把‘钥匙’,那么任何线程操作这个对象,都必须验证是否有‘钥匙’,如果没有则会报IllegalMonitorStateException异常. 可是‘锁芯’(对象独占权)只有一个,那么可以打开这把锁的多个‘钥匙

线程操作范例

实例要求: 设计一个线程操作类,要求可以产生三个线程对象,并可以分别设置三个线程的休眠时间.如下所示: 问怎么设计? 分析 从之前学习知道,线程的实现有两种方式,一种是继承Thread类,另一种是实现Runnable接口.而且类中应保存线程名称和休眠时间属性. 1,通过Thread类实现. 在Thread类中直接存在name属性.所以不用定义name属性,直接在子类构造方法通过super(name)方法设置即可. class MyThread extends Thread{ private in

8)Linux程序设计入门--线程操作

8)Linux程序设计入门--线程操作 前言:Linux下线程的创建 介绍在Linux下线程的创建和基本的使用. Linux下的线程是一个非常复杂的问题,由 于我对线程的学习不时很好,我在这里只是简单的介绍线程的创建和基本的使用,关于线 程的高级使用(如线程的属性,线程的互斥,线程的同步等等问题)可以参考我后面给出的 资料. 现在关于线程的资料在网络上可以找到许多英文资料,后面我罗列了许多链接,对 线程的高级属性感兴趣的话可以参考一下. 等到我对线程的了解比较深刻的时候,我回来 完成这篇文章.如

Android多线程编程之线程池学习篇(一)

Android多线程编程之线程池学习篇(一) 一.前言 Android应用开发中多线程编程应用比较广泛,而应用比较多的是ThreadPoolExecutor,AsyncTask,IntentService,HandlerThread,AsyncTaskLoader等,为了更详细的分析每一种实现方式,将单独成篇分析.后续篇章中可能涉及到线程池的知识,特此本篇分析为何使用线程池,如何使用线程池以及线程池的使用原理. 二.Thread Pool基础 进程代表一个运行中的程序,一个运行中的Android

线程异步学习(基于java学习笔记)

一 基本概念的理解 1.1线程中断方法 --interrupt() 当调用一个线程的interrupt方法时候,线程并没有真的被中断,只是对其状态改变,线程会有一个boolean变量isInterrputed.有wait sleep方法会阻塞线程. wait 和sleep方法都会使得线程挂起,阻塞.区别是wait会释放资源,而sleep方法并不会释放资源.一旦执行wait方法后,线程立即被挂起,直到有其他线程调用资源的notify方法.具体参见博客,多线程资源争用问题: http://blog.

C#跨线程操作控件的最简单实现探究

随着程序复杂度的提高,程序不可避免会出现多个线程,此时就很可能存在跨线程操作控件的问题. 跨线程操作UI控件主要有三类方式: 1.禁止系统的线程间操作检查.(此法不建议使用) 2.使用Invoke(同步)或者BeginInvoke(异步).(使用委托实现,并用lambda表达式简化代码) 3.使用BackgroundWorker组件.(此法暂不介绍,详情可见文末的参考资料) 先看一个跨线程操作失败的例子: 新建一个Winform窗口程序项目,拖一个button1和label1控件到Form1窗体

java线程操作范例

一:线程操作范例(1) package com.cloud.day6; public class Demo1 { publicstatic void main(String[] args) { MyThreadmt1=new MyThread("线程A", 1000); MyThreadmt2=new MyThread("线程B", 2000); MyThreadmt3=new MyThread("线程C", 3000); mt1.start()

Java 线程池学习

Reference: <创建Java线程池>[1],<Java线程:新特征-线程池>[2], <Java线程池学习>[3],<线程池ThreadPoolExecutor使用简介>[4],<Java5中的线程池实例讲解>[5],<ThreadPoolExecutor使用和思考>[6] [1]中博主自己通过ThreadGroup实现一个线程池(挺方便理解的),使用的是jdk1.4版本,Jdk1.5版本以上提供了现成的线程池. [2]中介绍

C#中利用委托实现多线程跨线程操作

在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的效率所做的改进,但是也给大家带来很多不便. 其实解决这个问题有两种方法:一,是通过设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;在你的程序初始化的时候设置了这个属性,而且在你的控件中使用的都是微软Framework类库中的控件的话,系统就不会再抛出你上面所说的