Thread.IsBackground プロパティ

スレッドがバックグラウンド スレッドであるかどうかを示す値を取得または設定します。

Public Property IsBackground As Boolean
[C#]
public bool IsBackground {get; set;}
[C++]
public: __property bool get_IsBackground();public: __property void set_IsBackground(bool);
[JScript]
public function get IsBackground() : Boolean;public function set IsBackground(Boolean);

プロパティ値

このスレッドがバックグラウンド スレッドである場合またはバックグラウンド スレッドになる場合は true 。それ以外の場合は false

例外

例外の種類 条件
ThreadStateException スレッドが停止しています。

解説

スレッドは、バックグランド スレッドかフォアグラウンド スレッドのいずれかになります。バックグラウンド スレッドは、プロセスの終了を回避しないという点を除けば、フォアグラウンド スレッドと同じです。プロセスに属するすべてのフォアグラウンド スレッドが終了すると、共通言語ランタイムは、その時点で有効なすべてのバックグラウンド スレッドで Abort を呼び出して、プロセスを終了します。

使用例

[Visual Basic, C#, C++] フォアグラウンド スレッドとバックグラウンド スレッドの動作を比較する例を次に示します。この例では、フォアグラウンド スレッドとバックグラウンド スレッドが作成されます。フォアグラウンド スレッドは、プロセスが while ループを完了するまでプロセスを実行し続けます。フォアグラウンド スレッドが完了すると、プロセスは、バックグラウンド スレッドが while ループを完了する前に終了されます。

 
Imports System
Imports System.Threading

Public Class Test

    Shared Sub Main()
        Dim shortTest As New BackgroundTest(10)
        Dim foregroundThread As New Thread(AddressOf shortTest.RunLoop)
        foregroundThread.Name = "ForegroundThread"

        Dim longTest As New BackgroundTest(50)
        Dim backgroundThread As New Thread(AddressOf longTest.RunLoop)
        backgroundThread.Name = "BackgroundThread"
        backgroundThread.IsBackground = True

        foregroundThread.Start()
        backgroundThread.Start()
    End Sub

End Class

Public Class BackgroundTest

    Dim maxIterations As Integer 

    Sub New(maximumIterations As Integer)
        maxIterations = maximumIterations
    End Sub

    Sub RunLoop()
        Dim threadName As String = Thread.CurrentThread.Name

        For i As Integer = 0 To maxIterations
            Console.WriteLine("{0} count: {1}", _
                    threadName, i.ToString())
            Thread.Sleep(250)
        Next i

        Console.WriteLine("{0} finished counting.", threadName)
    End Sub

End Class

[C#] 
using System;
using System.Threading;

class Test
{
    static void Main()
    {
        BackgroundTest shortTest = new BackgroundTest(10);
        Thread foregroundThread = 
            new Thread(new ThreadStart(shortTest.RunLoop));
        foregroundThread.Name = "ForegroundThread";

        BackgroundTest longTest = new BackgroundTest(50);
        Thread backgroundThread = 
            new Thread(new ThreadStart(longTest.RunLoop));
        backgroundThread.Name = "BackgroundThread";
        backgroundThread.IsBackground = true;

        foregroundThread.Start();
        backgroundThread.Start();
    }
}

class BackgroundTest
{
    int maxIterations;

    public BackgroundTest(int maxIterations)
    {
        this.maxIterations = maxIterations;
    }

    public void RunLoop()
    {
        String threadName = Thread.CurrentThread.Name;
        
        for(int i = 0; i < maxIterations; i++)
        {
            Console.WriteLine("{0} count: {1}", 
                threadName, i.ToString());
            Thread.Sleep(250);
        }
        Console.WriteLine("{0} finished counting.", threadName);
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;

__gc class BackgroundTest
{
    int maxIterations;

public:
    BackgroundTest(int maxIterations)
    {
        this->maxIterations = maxIterations;
    }

    void RunLoop()
    {
        String* threadName = Thread::CurrentThread->Name;
        for(int i = 0; i < maxIterations; i++)
        {
            Console::WriteLine(S"{0} count: {1}", 
                threadName, i.ToString());
            Thread::Sleep(250);
        }
        Console::WriteLine(S"{0} finished counting.", threadName);
    }
};

void main()
{
    BackgroundTest* shortTest = new BackgroundTest(10);
    Thread* foregroundThread = new Thread(
        new ThreadStart(shortTest, &BackgroundTest::RunLoop));
    foregroundThread->Name = "ForegroundThread";

    BackgroundTest* longTest = new BackgroundTest(50);
    Thread* backgroundThread = new Thread(
        new ThreadStart(longTest, &BackgroundTest::RunLoop));
    backgroundThread->Name = "BackgroundThread";
    backgroundThread->IsBackground = true;

    foregroundThread->Start();
    backgroundThread->Start();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, Common Language Infrastructure (CLI) Standard

参照

Thread クラス | Thread メンバ | System.Threading 名前空間 | フォアグラウンド スレッドとバックグラウンド スレッド