zoukankan      html  css  js  c++  java
  • 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(加锁的对象);

     

     

  • 相关阅读:
    下载字体的正确姿势
    字体基础知识与实际运用
    CSP复习与模板
    地理必修三知识点
    LaTeX公式手册(全网最全)
    动态规划求解0/1背包问题
    JavaScript对象简介(一)
    DOM文档对象模型简介
    SQLServer 的case when语句使用实现统计
    批量初始化数组和memset函数
  • 原文地址:https://www.cnblogs.com/showonce/p/5073785.html
Copyright © 2011-2022 走看看