进程、应用程序域(AppDomain)、线程之间的关系


进程 > 应用程序域(AppDomain) > 线程


一个进程可以有多个应用程序域;一个应用程序域可以执行多个线程,但同一时间线程只能在一个应用程序域中执行。


进程、应用程序域(AppDomain)、线程之间的关系_第1张图片


创建一个进程:

      启动一个chrome浏览器,打开黑马的首页:

        static void Main(string[] args)
        {
            //启动ie
            Process process = Process.Start("chrome.exe","http://edu.csdn.net");
        }

干掉一个进程:

     启动几个ie浏览器,执行以下代码,会关闭所有的ie浏览器

        static void Main(string[] args)
        {
            Process[] process = Process.GetProcessesByName("iexplore");   //获取ieplore的进程关联
            foreach (Process item in process)
            {
                item.Kill();       //立即停止关联的进程
            }   
        }

启动一个不带参数的线程:

 线程  Thread thread = new Thread(ThreadStart start)     参数为ThreadStart

          public delegate void ThreadStart();   而ThreadStart是一个无参的委托,所以上面的参数可以把一个方法传递过去

          new Thread(DoWord) ...

     终止一个线程

       thread.Abort();

        static void Main(string[] args)
        {
            Thread mainThread = Thread.CurrentThread;   //这是主线程


            Thread thread = new Thread(new Thread(DoWork));    //启动一个子线程,参数为ThreadStart
            thread.Start();
            int num = 0;
            while (num < 5)
            {  
                Console.WriteLine("这是主线程,ID:{0}", mainThread.ManagedThreadId);
                num++;
                Thread.Sleep(1000);
            }


        }
        static void DoWork()     //子线程执行的方法
        {


            while (true)
            {
                Console.WriteLine("这是子线程{0}在干活", Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(1000);
            }
        }

输出:

进程、应用程序域(AppDomain)、线程之间的关系_第2张图片

启动一个带参数的线程:

 线程  Thread thread = new Thread(ParameterizedThreadStart start)     参数为ParameterizedThreadStart

public delegate void ParameterizedThreadStart(object obj);   我们要把这样一个委托作为参数传递

        static void Main(string[] args)
        {
            //ParameterizedThreadStart parStart = new ParameterizedThreadStart(DoWork);
            Thread thread = new Thread(new ParameterizedThreadStart(DoWork));    //启动一个子线程,参数为ThreadStart
            thread.Start(10);

        }
        static void DoWork(object a)     //子线程执行的方法
        {

            while (true)
            {
                Console.WriteLine("这是子线程{0}在干活,值:{1}", Thread.CurrentThread.ManagedThreadId, a);
                Thread.Sleep(1000);
            }
        }

进程、应用程序域(AppDomain)、线程之间的关系_第3张图片

你可能感兴趣的:(C#)