官术网_书友最值得收藏!

Foreground and background threads

This recipe will describe what foreground and background threads are and how setting this option affects the program's behavior.

Getting ready

To work through this recipe, you will need Visual Studio 2015. There are no other prerequisites. The source code for this recipe can be found at BookSamples\Chapter1\Recipe7.

How to do it...

To understand the effect of foreground and background threads on a program, perform the following steps:

  1. Start Visual Studio 2015. Create a new C# console application project.
  2. In the Program.cs file, add the following using directives:
    using System;
    using System.Threading;
    using static System.Console;
    using static System.Threading.Thread;
  3. Add the following code snippet below the Main method:
    class ThreadSample
    {
      private readonly int _iterations;
    
      public ThreadSample(int iterations)
      {
        _iterations = iterations;
      }
      public void CountNumbers()
      {
        for (int i = 0; i < _iterations; i++)
        {
          Sleep(TimeSpan.FromSeconds(0.5));
          WriteLine($"{CurrentThread.Name} prints {i}");
        }
      }
    }
  4. Add the following code snippet inside the Main method:
    var sampleForeground = new ThreadSample(10);
    var sampleBackground = new ThreadSample(20);
    
    var threadOne = new Thread(sampleForeground.CountNumbers);
    threadOne.Name = "ForegroundThread";
    var threadTwo = new Thread(sampleBackground.CountNumbers);
    threadTwo.Name = "BackgroundThread";
    threadTwo.IsBackground = true;
    
    threadOne.Start();
    threadTwo.Start();
  5. Run the program.

How it works...

When the main program starts, it defines two different threads. By default, a thread that we create explicitly is a foreground thread. To create a background thread, we manually set the IsBackground property of the threadTwo object to true. We configure these threads in a way that the first one will be completed faster, and then we run the program.

After the first thread is complete, the program shuts down and the background thread is terminated. This is the main difference between the two: a process waits for all the foreground threads to complete before finishing the work, but if it has background threads, they just shut down.

It is also important to mention that if a program defines a foreground thread that does not get completed; the main program does not end properly.

主站蜘蛛池模板: 仪征市| 宿州市| 娄底市| 襄汾县| 晋宁县| 富川| 北宁市| 黑河市| 弋阳县| 蒲江县| 信阳市| 焦作市| 远安县| 东明县| 东辽县| 松溪县| 安溪县| 北海市| 宝鸡市| 丰都县| 宁陵县| 嘉荫县| 盱眙县| 渭南市| 诏安县| 马尔康县| 得荣县| 宜兴市| 承德市| 广灵县| 洛川县| 汕尾市| 杭锦后旗| 西平县| 盐亭县| 万源市| 乐亭县| 安吉县| 陇川县| 娱乐| 瓦房店市|