通过委托的方式创建线程


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. Winform-CheckBox、ChecklistBox控件遍历代码

    CheckBox,是各种开发语言环境和网页中常用的控件.下面,本文给大家讲解的是C#Winform版的CheckBox.控件遍历.全选.反选实例代码.①直接引用如果窗体form中存在CheckBox控 ...

  2. CSS_使用css布局

    本文出自:http://blog.csdn.net/svitter 1.   创建一个HTML页面, 其内容为一个无序列表,列表中至少包括了5本畅销书,每本书之前的项目符号必须採用概述封面的缩略图.这 ...

  3. Web版的各种聊天工具

    直到近期为止,我们经常使用的即时聊天工具(QQ.msn等)了Web版,大家不用下载庞大软件,直接打开网页就能够与自己的好友聊天,非常方便.在此将时汇总        便于大家查找        节约大 ...

  4. 动作-CCActionInterval之CCActionEase家族

    补间动作也是一个包装器(之前叫补间动画,从字面上讲,叫动作更合适一些.).你也可以叫他缓释动作. 1.含义 补间动作改变的是,内部动作的执行速率(注意,并没有改变执行的最终效果,和执行的时间.)关于这 ...

  5. 合并两个vectcor——2013-08-26

    vector<int> v1; vector<int> v2; for(int i=0; i<5; i++) { v1.push_back(i); if(i%2==1) ...

  6. IOS设备上给body绑定click事件不生效及其解决办法

    事件背景: 最近在做一个移动端业务的时候碰到一个bug,在ios上对body绑定click事实现事件代理冒泡至某些元素上尽然不生效. 思考: 暂借助jquery展示下事件绑定代码,将所有标签含有dat ...

  7. MySQL INSERT DELAYED

    INSERT DELAYED 语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_nam ...

  8. 深入理解计算机系统第二版习题解答CSAPP 2.5

    分别写出十六进制数0x87654321在大端法机器和小端法机器上第1个.前2个.前3个字节. A.小端法:21    大端法:87 B.小端法:21 43      大端法:87 65 C.小端法:2 ...

  9. Nuget 自动上传

    1:参考https://newnugetpackage.codeplex.com/wikipage?title=NuGet%20Package%20To%20Create%20A%20NuGet%20 ...

  10. 20160416--javaweb之国际化

    一:国际化1.国际化的概念:一款软件希望不同的国家和地区的使用者都可以使用,这个时候软件中的一些内容和数据需要根据用户地区信息不同而展示成不同的样子. 2.国际化的组成部分: (1)页面中固定文本元素 ...