通过委托的方式创建线程


static int sum(int x)

{

return x+x;

{

Func<int> a = sum;

创建一个新的线程格式:a.BeginInvoke(10);

获取一个线程的返回值:IAsyncResult ar = a.BeginInvoke(10,null,null);  

  //第二种方法 IAsyncResult ar = a.BeginInvoke(10,OnCallback,a);

  //第三种方法,使用lanmba表达式,例如:

    /* IAsyncResult ar = */ a.BeginInvoke(10,ar=>

    {

      int res = a.EndInvoke(ar);

      Console.WriteLine(res);

    },null)

  第一个null参数代表回调函数,例如:

    static void OnCallback(IAsyncResult ar)

    {

      第二个null参数是回调函数传递的数据,例如:

      Func<int> a = ar.AsyncState as Func<int>;  // 把ar.AsyncState类型转换为Func<int>类型的对象

    }

获取线程返回值的状态:ar.IsCompleted的返回值true为线程结束,false为线程还未结束。

获取线程的执行的结果:int res = a.EndInvoke(ar);


用Thread创建线程

创建线程:Thread t = new Thread(Function);  // Function为需要启动一个新的线程来执行的函数

启动线程:t.Start();  // 如果Function有参数(必须是Object类型),则Function的参数由Start函数来传递

获取线程ID:Thread.CurrentThread.ManagedThreadId

也可以自己写一个类,例如:

class MyThread

{

  private string fileName;

  private string filePath;

  public MyThread(string filename,string filepath)

  {

    this.fileName = filename;

    this.filePath   = filepath;

  }

  public void DownFile(string filename,string filepath)

  {

    Console.WriteLine("正在下载:"+filepath+filename);

    ......

    Console.WriteLine("下载完成");

  }

}

在program中调用

MyThread myt = new MyThread("filename","filepath");

Thread t = new Thread(myt.Down);

t.Start();

设置后台线程的方法,例如:t.IsBackground = true;

线程分为前台线程与后台线程,后台线程会伴随着前台线程的结束而被强制结束

强制终止一个线程:t.Abort();

优先执行的线程:t.Join();  // 暂停当前程序,先执行t.Join()然后再执行当前未执行完的线程

C#中的线程池

C#中已经封装好了一个线程池ThreadPool,在双核的条件下默认1023个工作线程,和1000个I/O线程。所有线程为后台线程

调用线程池的方法:ThreadPool.QueueUserWorkItem(Function);  // Function为自定义函数,这个函数要有一个object类型的一个参数

像一个正在运行的线程加锁的用法:lock(加锁的对象);

C#中线程的用法的更多相关文章

  1. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  2. python中threading的用法

    摘自:http://blog.chinaunix.net/uid-27571599-id-3484048.html 以及:http://blog.chinaunix.net/uid-11131943- ...

  3. 四种Java线程池用法解析

    本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...

  4. C#线程池用法

    C#线程池用法 在C#编程语言中,使用线程池可以并行地处理工作,当强制线程和更新进度条时,会使用内建架构的ThreadPool类,为批处理使用多核结构,这里我们来看在C#编程语言中一些关于来自Syst ...

  5. 【java】之常用四大线程池用法以及ThreadPoolExecutor详解

    为什么用线程池? 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率2.线程并发数量过多,抢占系统资源从而导致阻塞3.对线程进行一些简单的管理 在Java中,线程池 ...

  6. Java 中 synchronized的用法详解(四种用法)

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧 ...

  7. Java中线程池,你真的会用吗?

    在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Executors静态工厂构建线程池,但一般不建 ...

  8. java中线程池的几种实现方式

    1.线程池简介:    多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.        假设一个服务器完成一项任务所需时间为:T1 创建 ...

  9. java成神之——java中string的用法

    java中String的用法 String基本用法 String分割 String拼接 String截取 String换行符和format格式化 String反转字符串和去除空白字符 String获取 ...

随机推荐

  1. “cvSnakeImage”: 找不到标识符

    1>g:\project\opencv\helloopencv\helloopencv\helloopencv.cpp(74) : error C2065: "CV_VALUE&quo ...

  2. Android 颜色渲染(六) RadialGradient 环形渲染

    Android 颜色处理(六) RadialGradient 环形渲染 public RadialGradient(float x, float y, float radius, int[] colo ...

  3. 自己动手写CPU之第七阶段(7)——乘累加指令的实现

    将陆续上传本人写的新书<自己动手写CPU>.今天是第30篇.我尽量每周四篇 亚马逊的销售地址例如以下.欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8 ...

  4. Java生成word文档

    itext-rtf-2.1.7.jar,下载地址:http://download.csdn.net/detail/xuxu198899223/7717727 itext-2.1.7.jar 下载地址: ...

  5. java07 map

    map底层,数组加链表 集合: 是一个对象,只不过这个对象可以容纳别的对象.存放对象就是操作地址. List:是有序可重复的. Set:无顺序,不可重复,有重复则后面把前面的覆盖. Map:键值对. ...

  6. Lambda表达式(C语言-gcc编译器)

    前言 先来啰嗦几句,身边的朋友,同事都喜欢在博客上记录自己在学习计算机编程技术路程上的一些问题和心得.就我个人而言,这是个好习惯,特别是在计算机编程领域,技术方向种类繁多,永无止境.所以,我也开始我人 ...

  7. Linux基础命令(三)

    一.常用命令—文件目录类命令 1.ls 列出指定或默认目录的文件信息 使用形式: ls [选项] [目录名] 实例: $ls $ls –als $ls /home/sq/Desktop $ls ./D ...

  8. 从Kali 2.0 转至 Kali Rolling

    1. 修改官方软件库列表 编辑/etc/apt/sources.list,注释掉原有内容,然后添加下述内容. # kali rolling deb http://http.kali.org/kali ...

  9. mono & apache install

    1.red hat 6安装完后网卡是默认不启动的 作为双生兄弟的CENTOS同样如是 第一步 设置网卡开机启动 进入 路径此目录下修改网卡配置文件 如果网卡驱动正常 会有如下文件 只要修改 ifcfg ...

  10. 网页设定固定背景图片(抄袭自百度FM)

    这个新技能,我是从百度FM中学习到的. 在网页中,有一个id为"body-bg"的层, html代码: <div id="body-bg" style=& ...