public:
property bool IsBackground { bool get(); void set(bool value); };
public bool IsBackground { get; set; }
member this.IsBackground : bool with get, set
Public Property IsBackground As Boolean
下面的示例对前台线程和后台线程的行为进行对比。 它创建前台线程和后台线程。 前台线程使进程保持运行,直到完成其
for
循环并终止。 但是,如示例的输出所示,由于前台线程已完成执行,因此后台线程完成执行之前将终止进程。
using namespace System;
using namespace System::Threading;
ref class BackgroundTest
private:
int maxIterations;
public:
BackgroundTest(int maxIterations)
this->maxIterations = maxIterations;
void RunLoop()
for (int i = 0; i < maxIterations; i++ )
Console::WriteLine("{0} count: {1}",
Thread::CurrentThread->IsBackground ?
"Background Thread" : "Foreground Thread", i);
Thread::Sleep(250);
Console::WriteLine("{0} finished counting.",
Thread::CurrentThread->IsBackground ?
"Background Thread" : "Foreground Thread");
int main()
BackgroundTest^ shortTest = gcnew BackgroundTest( 10 );
Thread^ foregroundThread = gcnew Thread( gcnew ThreadStart( shortTest, &BackgroundTest::RunLoop ) );
foregroundThread->Name = "ForegroundThread";
BackgroundTest^ longTest = gcnew BackgroundTest( 50 );
Thread^ backgroundThread = gcnew Thread( gcnew ThreadStart( longTest, &BackgroundTest::RunLoop ) );
backgroundThread->Name = "BackgroundThread";
backgroundThread->IsBackground = true;
foregroundThread->Start();
backgroundThread->Start();
using System;
using System.Threading;
class Example
static void Main()
BackgroundTest shortTest = new BackgroundTest(10);
Thread foregroundThread =
new Thread(new ThreadStart(shortTest.RunLoop));
BackgroundTest longTest = new BackgroundTest(50);
Thread backgroundThread =
new Thread(new ThreadStart(longTest.RunLoop));
backgroundThread.IsBackground = true;
foregroundThread.Start();
backgroundThread.Start();
class BackgroundTest
int maxIterations;
public BackgroundTest(int maxIterations)
this.maxIterations = maxIterations;
public void RunLoop()
for (int i = 0; i < maxIterations; i++) {
Console.WriteLine("{0} count: {1}",
Thread.CurrentThread.IsBackground ?
"Background Thread" : "Foreground Thread", i);
Thread.Sleep(250);
Console.WriteLine("{0} finished counting.",
Thread.CurrentThread.IsBackground ?
"Background Thread" : "Foreground Thread");
// The example displays output like the following:
// Foreground Thread count: 0
// Background Thread count: 0
// Background Thread count: 1
// Foreground Thread count: 1
// Foreground Thread count: 2
// Background Thread count: 2
// Foreground Thread count: 3
// Background Thread count: 3
// Background Thread count: 4
// Foreground Thread count: 4
// Foreground Thread count: 5
// Background Thread count: 5
// Foreground Thread count: 6
// Background Thread count: 6
// Background Thread count: 7
// Foreground Thread count: 7
// Background Thread count: 8
// Foreground Thread count: 8
// Foreground Thread count: 9
// Background Thread count: 9
// Background Thread count: 10
// Foreground Thread count: 10
// Background Thread count: 11
// Foreground Thread finished counting.
Imports System.Threading
Public Module Example
Public Sub Main()
Dim shortTest As New BackgroundTest(10)
Dim foregroundThread As New Thread(AddressOf shortTest.RunLoop)
Dim longTest As New BackgroundTest(50)
Dim backgroundThread As New Thread(AddressOf longTest.RunLoop)
backgroundThread.IsBackground = True
foregroundThread.Start()
backgroundThread.Start()
End Sub
End Module
Public Class BackgroundTest
Dim maxIterations As Integer
Sub New(maximumIterations As Integer)
maxIterations = maximumIterations
End Sub
Sub RunLoop()
For i As Integer = 0 To maxIterations
Console.WriteLine("{0} count: {1}", _
If(Thread.CurrentThread.IsBackground,
"Background Thread", "Foreground Thread"), i)
Thread.Sleep(250)
Console.WriteLine("{0} finished counting.",
If(Thread.CurrentThread.IsBackground,
"Background Thread", "Foreground Thread"))
End Sub
End Class
' The example displays output like the following:
' Foreground Thread count: 0
' Background Thread count: 0
' Background Thread count: 1
' Foreground Thread count: 1
' Foreground Thread count: 2
' Background Thread count: 2
' Foreground Thread count: 3
' Background Thread count: 3
' Background Thread count: 4
' Foreground Thread count: 4
' Foreground Thread count: 5
' Background Thread count: 5
' Foreground Thread count: 6
' Background Thread count: 6
' Background Thread count: 7
' Foreground Thread count: 7
' Background Thread count: 8
' Foreground Thread count: 8
' Foreground Thread count: 9
' Background Thread count: 9
' Background Thread count: 10
' Foreground Thread count: 10
' Background Thread count: 11
' Foreground Thread finished counting.
线程是后台线程或前台线程。 后台线程与前台线程相同,只不过后台线程不会阻止进程终止。 一旦属于进程的所有前台线程都终止,公共语言运行时将结束该进程。 所有剩余的后台线程将停止,并且无法完成。
默认情况下,以下线程在前台 (,即其
IsBackground
属性返回
false
) :
主线程 (或主应用程序线程) 。
通过调用类构造函数创建
Thread
的所有线程。
默认情况下,以下线程在后台执行 (,即其
IsBackground
属性返回
true
) :
线程池线程,由运行时维护的工作线程池。 可以使用 类配置线程池并计划线程池线程
ThreadPool
上的工作。
基于任务的异步操作在线程池线程上自动执行。
从非托管代码进入托管执行环境的所有线程。