通过委托的方式创建线程


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. MantisBT

    官方网站:http://www.mantisbt.org/ MantisBT is a free popular web-based bugtracking system (feature list) ...

  2. linux shell执行方式

    linux shell执行有两种方式 shell脚本以#!/bin/bash开头,执行shell时先检查首行,在内部以下列方式执行: $/bin/bash script.sh 1. 使用sh执行. $ ...

  3. How To Install Kernel 3.10 On Ubuntu, Linux Mint, Debian and Derivates

    n this article I will show you how to install Linux Kernel 3.10 on Ubuntu 13.10 Saucy Salamander, Ub ...

  4. 基于anyrtc的sdk实现直播连麦互动

    基于anyrtc的sdk实现直播连麦互动 前言 1.由于粘贴了较大的代码,造成内容比较长,可能会花费您较长的时间. 2.项目里面没有做权限判断,所以如果发现有页面发生崩溃可能是权限没有打开,请打开权限 ...

  5. Android_Intent_passValueForResult

    当SecondActivity需要回传参数时:1. MainActivity启动SecondActivity时需要调用startActivityForResult() 并定义请求码2. SecondA ...

  6. AWS 命令行界面 + Python 的 AWS 开发工具包 (Boto3)

    安装AWS CLI $ pip install awscli 安装Boto3 $ pip install boto3 设置AWS CLI $ aws configure AWS Access Key ...

  7. xml_02

    1.xml 2.对于XML文档的约束   |-DTD      <!DOCTYPE 根元素 [       <!ELEMENT 元素名 (xx)>       <!ATTLIS ...

  8. hibernate篇章二--成就搭建hibernate框架

    在网上的资料很多,但是成功搭建一个Hibernate框架的很少,下面我将用一个简单的例子成功搭建一个Hibernate框架给大伙瞧瞧 该链接中有源代码和数据库,例子很简单,只是往数据库中的person ...

  9. C# 的static与单例模式

    C# 的static与单例模式 static是静态对象,在类被第一次使用,或者第一次被实例化时执行 /// <summary> /// 线程安全的单件模式 /// </summary ...

  10. swift 自行理解