📜  C#中的主线程

📅  最后修改于: 2021-05-29 18:00:53             🧑  作者: Mango

C#为多线程编程提供了内置支持。多线程程序包含两个或多个可以同时运行的部分。此类程序的每个部分都称为一个线程,并且每个线程都定义了单独的执行路径。

主线

当C#程序启动时,一个线程立即开始运行。通常将其称为程序的主线程。

特性:

  • 它是将在其下创建其他“子”线程的线程。
  • 通常,它必须是完成执行的最后一个线程,因为它执行各种关闭操作。

例子:

// C# program to illustrate the working
//  of main thread and child thread
using System;
using System.Threading;
  
public class GFG {
  
    // Main thread
    static public void Main()
    {
        Console.WriteLine("Welcome to the Main thread");
  
        // Child threads
        Thread thrA = new Thread(childthread);
        Thread thrB = new Thread(childthread);
        thrA.Start();
        thrB.Start();
    }
  
    public static void childthread()
    {
        Console.WriteLine("Welcome to the Child thread");
    }
}

输出:

Welcome to the Main thread
Welcome to the Child thread
Welcome to the Child thread

说明:上面的程序仅包含一个称为线程的线程。主线程的工作方式与其他线程一样,但是它是自动启动的,您不需要任何Start()方法即可开始执行主线程。 thrAthrB都是主线程的子线程。在该子线程开始工作之后,第一个主线程开始工作。

如何访问主线程?

要访问主线程,您需要Thread类对象来引用它。您可以使用Thread类的CurrentThread属性来创建它。它将引用返回到它所使用的线程。因此,当您在主线程中使用CurrentThread属性时,您将获得主线程的引用。之后,您将像其他线程一样获得对主线程的控制。

例子:

// C# program to illustrate
// how to access main thread
using System;
using System.Threading;
  
public class GFG {
  
    // Main Method
    static public void Main()
    {
        Thread thr;
  
        // Get the reference of main Thread
        // Using CurrentThread property
        thr = Thread.CurrentThread;
  
        // Display the name of 
        // the main Thread
        if (thr.Name == null) {
  
            Console.WriteLine("Main thread does not have name");
        }
  
        else {
  
            Console.WriteLine("The name of main "+
                      "thread is: {0}", thr.Name);
        }
  
        Console.WriteLine();
  
        // Display the priority of main thread
        Console.WriteLine("The priority of main"+
                " thread is: {0}", thr.Priority);
  
        // Set the name of main thread
        thr.Name = "Main Thread";
        Console.WriteLine();
  
        // Display the name of main thread
        Console.WriteLine("The name of main "+
                  "thread is: {0}", thr.Name);
    }
}

输出:

Main thread does not have name

The priority of main thread is: Normal

The name of main thread is: Main Thread
使用主线程进行死锁

我们可以仅通过使用主线程(即仅使用一个线程)来创建死锁。下面的C#程序演示了这一点。

例子:

// C# program to demonstrate deadlock
// using the Main thread
using System;
using System.Threading;
  
public class GFG {
  
    // Main Method
    public static void Main()
    {
  
        try {
  
            Console.WriteLine("Enter into DEADLOCK!!");
  
            Thread.CurrentThread.Join();
  
            // the following statement
            // will never execute
            Console.WriteLine("This statement will never execute");
        }
  
        catch (ThreadInterruptedException e) {
            e.ToString();
        }
    }
}

输出:

Enter into DEADLOCK!!

运行时错误:

说明:语句“ Thread.currentThread().join() ”将告诉主线程等待该线程死亡(即等待自身)死亡。因此,主线程等待自己死亡,这只是一个死锁。