多线程

多线程

C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。

进程

  Process press = Process.Start("iexplore.exe", "www.baidu.com"); //启动一个进程
  var processes = Process.GetProcesses(); //获得本地进程
  foreach (var item in processes)
  {
      Console.WriteLine(item.ProcessName);
  }

   获取当前进程 睡100秒,在关掉
  Process p = Process.GetCurrentProcess();
  Thread.Sleep(100);
  p.Kill();

应用程序域

  AppDomain.Unload(AppDomain.CurrentDomain); 
    if (AppDomain.CurrentDomain.IsDefaultAppDomain()) {
        Console.WriteLine("主应用程序域");
    }
    //自己写个一个应用程序域//创建一个应用程序域
    AppDomainSetup setup = new AppDomainSetup();
    setup.LoaderOptimization = LoaderOptimization.SingleDomain;
    AppDomain appDomain = AppDomain.CreateDomain("MultThread", null, setup);
    appDomain.ExecuteAssembly("MultThread.exe");

线程

   Thread Mainthread = Thread.CurrentThread;
    Console.WriteLine("主线程id是:{0}", Mainthread.ManagedThreadId);
    //创建一个线程
    ThreadStart start = DoWork;
    Thread thread = new Thread(start);
    thread.Name = "first";
    //线程的级别:微软对windows 0-31级别,级别是动态的,操作系统只做参考
    thread.Priority = ThreadPriority.Normal;
    //设置后台线程:主线程关闭了,子线程也关闭
    //前台线程:主线程关了, 子线程还在跑着
    thread.IsBackground = true;
    //启动线程(不是真正启动,告诉CPU可以启动)
    thread.Start();
    while (true)
    {
        Console.WriteLine("主线程跑起:{0}", Thread.CurrentThread.ManagedThreadId);
        Thread.Sleep(1000);
        //thread.Abort(thread);//终止线程
    }

带参数的线程

 Thread thread = new Thread((a) => {Console.WriteLine("参数{0},{1}", a, Thread.CurrentThread.ManagedThreadId); });
 Thread thread = new Thread((a) => DoWork(a));
 thread.IsBackground = true;
 thread.Start(2);

Demo异步委托

 class Program
    {
        public delegate void AddDel();
               static void Main(string[] args)
        {   AddDel aa = DoWork;
            AddDel addDemo = new AddDel(aa);
            addDemo.BeginInvoke(null, null);
            Console.ReadKey();
        }
     static void DoWork() 
     {
      while (true)
      {
          Console.WriteLine("子线程跑起:{0}",Thread.CurrentThread.ManagedThreadId);
          Thread.Sleep(1000);
      }
      //Console.WriteLine("子线程跑起:{0}",Thread.CurrentThread.ManagedThreadId);
     }

    }

Demo摇号机

图1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace 摇号机
{  
    public partial class Form1 : Form
    {
        List<Label> list = new List<Label>();
        public bool IsCreate = false;
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            list.Add(this.label1); list.Add(this.label2); list.Add(this.label3);
            list.Add(this.label4);list.Add(this.label5);list.Add(this.label6);
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            if (IsCreate)
            {
                IsCreate = false;
                btnStart.Text = "开始";
            }
            else 
            {
                this.btnStart.Text = "结束";
                IsCreate = true;
                //启动一个线程 改变值
                ThreadStart start = workRandom;
                Thread thread = new Thread(start);

                thread.IsBackground = true;
                thread.Start();
            }
        }
        public  void workRandom() 
        {
            Random random = new Random();
            while (IsCreate) 
            {
                for (int i = 0; i < 6; i++) 
                {
                    list[i].Text = random.Next(0, 10).ToString();
                }
                Thread.Sleep(100);  
            }
        }
    }
}

转载请注明: Zhou•Yong 多线程

上一篇
递归VS循环 递归VS循环
递归VS循环求第三位数前2位之和 ,一列数的规则如下: 1、1、2、3 class Program { static void Main(string[] args) { w
2019-01-15
下一篇
单例模式 单例模式
Singleton单例模式也就是保证一个类只有一个实例的一种实现方法, 写法一: class Program { static void Main(string[] args) {
2019-01-15
目录