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# Static的用法详解
- C#子线程中更新ui-----c# 多线程多文件批量下载
- C# 通过HttpWebRequest在后台对WebService进行调用
- C#中yield return用法
- C#中Messagebox.Show()常用参数用法详解
- C#和nodejs的互操作
- C#中DllImport用法汇总
- C#项目中操作Excel文件——使用NPOI库
- c# ref和out 详解
- C# index of 用法(转载)
- C# DataTable Select用法
- C# 根据列名与列值设置当前行
- C# 中的枚举类型 enum (属于值类型)
- c# var的含义与用法
- C# 移除数组中重复数据
- C# XML本地文件转换成XML字符串
- C#中comboBox控件的一些基本用法小结
- C#+无unsafe的非托管大数组(large unmanaged array in c# without 'unsafe' keyword)
- C# 各类集合用法汇总【全面示例各种方法】
- C# ListView用法详解
- C#中HttpWebRequest的用法详解
- [C#]c#中数据的同步加锁机制 的几种方法
- VS 多进程调试(C#和C )