Cómo verificar si un hilo es un hilo de fondo o no en C# – Part 1

Como sabemos, ese hilo es creado y administrado por la clase Thread. Entonces, la clase Thread proporciona una propiedad conocida como propiedad IsBackground para verificar si el hilo dado se está ejecutando en segundo plano o en primer plano. Si el valor de IsBackground se establece en true , significa que el subproceso es un subproceso de fondo. O si el valor de IsBackground se establece en false , significa que el subproceso es un subproceso en primer plano.

Sintaxis:

public bool IsBackground { get; set; }

Valor de retorno: esta propiedad devuelve verdadero si este subproceso es o va a convertirse en un subproceso de fondo; de lo contrario, devuelve falso .

Excepción: esta propiedad dará ThreadStateExceptionsi el subproceso está muerto.

Ejemplo 1:

// C# program to illustrate the
// concept of Background thread
using System;
using System.Threading;
  
class GFG {
  
    // Main method
    static void Main(string[] args)
    {
        // Creating and initializing thread
        Thread mythr = new Thread(mythread);
  
        // Name of the thread is Geek thread
        mythr.Name = "Geek thread";
        mythr.Start();
  
        // IsBackground is the property
        // of Thread which allows thread
        // to run in the background
        mythr.IsBackground = true;
  
        Console.WriteLine("Main Thread Ends!!");
    }
  
    // Static method
    static void mythread()
    {
  
        // Display the name of the
        // current working thread
        Console.WriteLine("In progress thread is: {0}",
                          Thread.CurrentThread.Name);
  
        Thread.Sleep(1000);
  
        Console.WriteLine("Completed thread is: {0}",
                          Thread.CurrentThread.Name);
    }
}

Producción :

In progress thread is: Geek thread
Main Thread Ends!!

Ejemplo 2:

// C# program to illustrate the
// concept of IsBackground property
using System;
using System.Threading;
  
class Geeks {
  
    int J;
  
    public Geeks(int J)
    {
        this.J = J;
    }
  
    // This method will display
    // the counting of background
    // and foreground threads
    public void display()
    {
        for (int i = 0; i < J; i++) {
              
            Console.WriteLine("{0} count: {1}", 
             Thread.CurrentThread.IsBackground ? 
                           "Background Thread" : 
                        "Foreground Thread", i);
                          
            Thread.Sleep(250);
        }
          
        Console.WriteLine("{0} finished its counting.",
                    Thread.CurrentThread.IsBackground ?
            "Background Thread" : "Foreground Thread");
    }
}
  
// Driver Class
class GFG {
      
    // Main method
    static void Main()
    {
        // Creating and initializing
        // objects of Geeks class
        // Creating and initializing 
        // objects of Thread class
        Geeks obj1 = new Geeks(5);
        Thread fthr = new Thread(new ThreadStart(obj1.display));
  
        Geeks obj2 = new Geeks(10);
        Thread bthr = new Thread(new ThreadStart(obj2.display));
  
        // bthr thread is a background
        // thread because the value of
        // IsBackground property is true
        bthr.IsBackground = true;
  
        fthr.Start();
        bthr.Start();
    }
}

Producción :

Foreground Thread count: 0
Background Thread count: 0
Background Thread count: 1
Foreground Thread count: 1
Background Thread count: 2
Foreground Thread count: 2
Background Thread count: 3
Foreground Thread count: 3
Background Thread count: 4
Foreground Thread count: 4
Background Thread count: 5
Foreground Thread finished its counting.

Nota:

  • Un subproceso es un subproceso de fondo o un subproceso de primer plano. Los subprocesos en segundo plano son similares a los subprocesos en primer plano, excepto que los subprocesos en segundo plano no evitan que finalice un proceso.
  • Una vez que todos los subprocesos en primer plano que pertenecen a un proceso han finalizado, Common Language Runtime finaliza el proceso. Cualquier subproceso de fondo restante se detiene y no se completa.
  • El subproceso principal o el subproceso principal de la aplicación y todos los subprocesos creados por el constructor de la clase Thread se ejecutan en primer plano (es decir, su propiedad IsBackground devuelve falso).
  • Los subprocesos del grupo de subprocesos y todos los subprocesos que ingresan al entorno de ejecución administrado desde código no administrado se ejecutan en segundo plano (es decir, su propiedad IsBackground devuelve verdadero).

Referencia:

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *