Background和Foreground线程

记得C\C++中只要主线程结束后整个进程会结束,不论次线程是否已经运行完。在.NET的世界中,进程的结束与否与全部标记为Foreground线程是否运行完毕有关。 使用Thread类创建的线程,默认是Foreground线程。当然可以通过 Thread.IsForeground 属性设置。

下面给出两个例子,这两个例子都是运行一个线程,在控制台打印一个组数字。只不过,一个是Foreground线程,另一个是Background线程。

打印数字的代码:

public class Printer
{
public void PrintNumbers()
{

for (int i = 0; i < 10; i++)
{
// Put thread to sleep for a random amount of time.
Random r = new Random();
Thread.Sleep(1000 * r.Next(5));
Console.Write("{0}, ", i);
}
Console.WriteLine();
}
}
  • Foreground线程

Foreground线程的例子:

class Program
{
static void Main(string[] args)
{

Console.WriteLine("***** Foreground Threads *****\n");
Printer p = new Printer();
Thread foregroundThread = new Thread(new ThreadStart(p.PrintNumbers));
// default is foreground
foregroundThread.Start();
}
}

由于创建的次线程是Foreground线程,所以控制台程序会等到所有Foreground线程结束后才退出。

  • Background线程

Background线程的例子

class Program
{
static void Main(string[] args)
{

Console.WriteLine("***** Background Threads *****\n");
Printer p = new Printer();
Thread bgroundThread = new Thread(new ThreadStart(p.PrintNumbers));
// set the thread to be background
backgroundThread.IsBackground=true;
bgroundThread.Start();
}
}

由于创建的次线程是Background线程,所以控制台程序会在主线程运行结束后立马退出,即执行完main函数。