C#中线程的用法
通过委托的方式创建线程
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#中线程的用法的更多相关文章
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
- python中threading的用法
摘自:http://blog.chinaunix.net/uid-27571599-id-3484048.html 以及:http://blog.chinaunix.net/uid-11131943- ...
- 四种Java线程池用法解析
本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...
- C#线程池用法
C#线程池用法 在C#编程语言中,使用线程池可以并行地处理工作,当强制线程和更新进度条时,会使用内建架构的ThreadPool类,为批处理使用多核结构,这里我们来看在C#编程语言中一些关于来自Syst ...
- 【java】之常用四大线程池用法以及ThreadPoolExecutor详解
为什么用线程池? 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率2.线程并发数量过多,抢占系统资源从而导致阻塞3.对线程进行一些简单的管理 在Java中,线程池 ...
- Java 中 synchronized的用法详解(四种用法)
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧 ...
- Java中线程池,你真的会用吗?
在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Executors静态工厂构建线程池,但一般不建 ...
- java中线程池的几种实现方式
1.线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建 ...
- java成神之——java中string的用法
java中String的用法 String基本用法 String分割 String拼接 String截取 String换行符和format格式化 String反转字符串和去除空白字符 String获取 ...
随机推荐
- Python+Django+SAE系列教程17-----authauth (认证与授权)系统1
通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...
- mac jdbc连接mysql
1.下载jdbc驱动: http://dev.mysql.com/downloads/connector/j/ 2.增加jdbc的jar包至项目的libs文件夹并build path 2.改动环境变量 ...
- ubuntu12.04已安装SQLite3
而简单易用
今天想写一点app,使用数据库,所以在这里简要地记住它是安装和使用. 1.安装SQLite3 命令行下输入:sudo apt-get install sqlite3 2.安装SQLite3编译须要的工 ...
- mysql优化之连接优化
Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 连接优化 连接优化主要指客户端连接数据库以及 ...
- 进程控制之wait3和wait4函数
大多数UNIX系统实现提供了另外两个函数wait3和wait4.它们提供的功能比POSIX.1函数wait.waitpid和waitid所提供的功能要多一个,这与附加参数rusage有关.该参数要求内 ...
- INSTALL_FAILED_VERSION_DOWNGRADE报错
error: INSTALL_FAILED_VERSION_DOWNGRADE 原因:模拟器或者实际的device中已经安装了同名的app,且本次的版本并不高 解决:在模拟器中卸载此同名应用,之后再运 ...
- 【转】Cocos2d-x纹理优化的一些方案——2013-08-26 22
http://wap.oschina.net/question/565065_79814 在目前的移动平台游戏开发过程中,很多朋友会遇到开发出来的DEMO占用内存过大,导致渲染效率低下的问题.究其原因 ...
- 普通SQL注入
安全防御:过滤/转义非法参数,屏蔽SQL查询错误. 工具:Firefox,hackbar,sqlmap,burpsuite 1.联想tms站 例1, 联想tms站fromCity参数存在普通SQL注入 ...
- easy_painting
最近感觉结构,比例抓的容易多了.
- bubble_sort
冒泡排序法: #include <iostream> #include <algorithm> using namespace std; int main(){ int n; ...