zoukankan      html  css  js  c++  java
  • C#线程运用基础

    ThreadStart ts=new ThreadStart(a.f);//ThreadStart 是一个委托,用以关联a.f方法
    Thread th=new Thread (ts);//Thread是一个类,实例化对象时调用的构造函数参数为ts这个委托对象

    th.Start();//线程开始

    线程的同步控制:
    1.使用ManualResetEvent类,将该类的对象设置为无信号状态(Reset()方法)或有信号状态(Set()方法)。WaitOne()方法阻止当前线程运行,直到收
    到ManualResetEvent类对象发送的信息为有信号。将被视为一体的语句序列(执行过程中不允许其他线程读写共享数据)置于Reset()和Set()方法之间即为

    “线程的加锁”。

    2.使用AutoResetEvent类的方式与上述方式略有差别,在此不详细介绍。

    线程池

            实际上是一种线程管理器,由ThreadPool类提供的方法来维护线程。线程池可以简单地理解为存放线程的容器。线程池中存放若干线程,当有任务要执行

    的时候,从线程池中唤醒一个线程,令它执行该任务;任务执行完毕后,重新将线程放回线程池(而不是销毁),并令其处于休眠状态。这样,就不需要对线程
    进行创建和销毁操作,从而节省时间并使系统更加稳定。
    ThreadPool.QueueUserWorkItem(new WaitCallback(a.f),object)利用线程池,无须显式创建线程,只需将要完成的任务写成函数,然后将其作为参数通过

    WaitCallback代理对象传递给QueueUserWorkItem()方法即可,而后由线程池自动建立,管理,运行相应的线程。

    线程对控件的访问
    在多线程编程设计中,不允许一个线程访问在另一个线程中创建的对象。但在许多应用中,恰恰要这么做。使用Contral类提供的Invoke()方法可以解决这一
    问题。Invoke()方法可以调用窗体界面线程(主线程)中的任何一个委托对象,原型如下:
    Invoke(new f(g),new object[]{})//f()是一个委托,这个委托关联的g方法中有对主线程中控件的操作,方法g的参数写在object对象数组中。



    有关线程常用的一些方法和属性:
    1.Abort()方法用于终止线程;
    2.IsBackground属性有两个值,true和false,指示线程为后台线程或者是前台线程;
    3.线程的优先级由Thread类的Priority属性来设置,值集是一个枚举,即Lowest,BelowNormal,Normal,AboveNormal,Highest
        eg:th.Priority=ThreadPriority.Lowest;

    文章出自:https://blog.csdn.net/ye_hong/article/details/41395231

  • 相关阅读:
    docker在Linux环境下的安装
    docker在Windows环境下的安装
    tcpdump和windump
    Centos7下安装Elasticsearch 5.6.6
    使用concurrent.futures模块并发,实现进程池、线程池
    Nginx配置Gzip
    linux常用命令
    Linux下文档与目录结构
    快速读取大文件的几种方式
    linux 将大文件分解为多个小文件
  • 原文地址:https://www.cnblogs.com/hyshareex/p/9370480.html
Copyright © 2011-2022 走看看