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

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 2012. 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:

  1. Start Visual Studio 2012. Create a new C# Console Application project.
  2. In the Program.cs file, add the following using directives:
    using System;
    using System.Threading;
  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++)
        {
          Thread.Sleep(TimeSpan.FromSeconds(0.5));
          Console.WriteLine("{0} prints {1}", Thread.CurrentThread.Name, 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 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 complete faster, and then we run the program.

After the first thread completes, the program shuts down and the background thread terminates. 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 complete, the main program will not end properly.

主站蜘蛛池模板: 甘谷县| 昌乐县| 潼南县| 玉屏| 新兴县| 阜阳市| 霍城县| 方正县| 肥西县| 金溪县| 吴川市| 临沭县| 甘孜县| 深州市| 永新县| 牡丹江市| 布尔津县| 永济市| 汝南县| 潍坊市| 綦江县| 周宁县| 金寨县| 旅游| 桓仁| 高密市| 民县| 福清市| 杭锦后旗| 双鸭山市| 泽库县| 岐山县| 温泉县| 芦山县| 普宁市| 乌鲁木齐市| 民乐县| 旬邑县| 英吉沙县| 大渡口区| 宁安市|