MSDN ライブラリ
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

ThreadStart デリゲート

2013/12/12

Thread で実行するメソッドを表します。

Namespace:  System.Threading
アセンブリ:  mscorlib (mscorlib.dll 内)

public delegate void ThreadStart()

マネージ スレッドを作成すると、そのスレッドで実行するメソッドが、Thread コンストラクターに渡される ThreadStart デリゲートまたは ParameterizedThreadStart デリゲートで表されます。スレッドは Thread.Start メソッドが呼び出されるまで実行を開始しません。実行は、ThreadStart デリゲートまたは ParameterizedThreadStart デリゲートで表されるメソッドの最初の行から開始されます。

メモメモ:

Visual Basic および C# のユーザーは、スレッドを作成するときに ThreadStart または ParameterizedThreadStart デリゲート コンストラクターを省略できます。Visual Basic では、メソッドを Thread コンストラクターに渡すときに、Dim t As New Thread(AddressOf ThreadProc) のように AddressOf 演算子を使用します。C# では、スレッド プロシージャの名前を指定するだけです。コンパイラにより、適切なデリゲート コンストラクターが選択されます。

このセクションには、2 つの例が含まれています。最初の例では、ThreadStart デリゲートを使用して静的メソッドを実行する方法を示し、2 番目の例では ThreadStart デリゲートを使用してインスタンス メソッドを実行する方法を示します。

これらの例では、UI スレッドの TextBlock に出力を表示します。これらの例では、コールバック スレッドから TextBlock にアクセスするために、Dispatcher プロパティを使用して TextBlock 用の Dispatcher オブジェクトを取得した後、Dispatcher.BeginInvoke メソッドを使用してスレッド間呼び出しを実行します。

スレッド作成の詳細については、「[52B32222-E185-4F42-91A7-EACA65C0AB6D]」を参照してください。

例 1

ThreadStart デリゲートを使用して静的メソッドを実行する方法を、次のコード例に示します。


using System;
using System.Threading;

public class Example
{
   private static System.Windows.Controls.TextBlock outputBlock;

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      Example.outputBlock = outputBlock;

      // To start a thread using a static thread procedure, use the
      // class name and method name when you create the ThreadStart
      // delegate. C# expands the method name to the appropriate 
      // delegate creation syntax:
      //    New ThreadStart(Example.DoWork)
      //
      Thread newThread = new Thread(Example.DoWork);
      newThread.Start();
   }

   // Simulate work. To communicate with objects on the UI thread, get the 
   // Dispatcher for one of the UI objects. Use the Dispatcher object's 
   // BeginInvoke method to queue a delegate that will run on the UI thread,
   // and therefore can safely access UI elements like the TextBlock.
   private static void DoWork()
   {
      outputBlock.Dispatcher.BeginInvoke(delegate () { 
         outputBlock.Text += "Hello from a static thread procedure.\n"; 
      });
   }
}

/* This code example produces the following output:

Hello from a static thread procedure.
 */


例 2

ThreadStart デリゲートを使用してインスタンス メソッドを実行する方法を、次のコード例に示します。


using System;
using System.Threading;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      // To start a thread using an instance method for the thread 
      // procedure, use the instance variable and method name when 
      // you create the ThreadStart delegate. C# expands the object
      // reference and method name to the appropriate delegate 
      // creation syntax:
      //    New ThreadStart(AddressOf w.DoMoreWork)
      //
      Work w = new Work();
      w.Data = 42;
      w.Output = outputBlock;

      Thread newThread = new Thread(w.DoMoreWork);
      newThread.Start();
   }
}

public class Work
{
   public int Data;
   public System.Windows.Controls.TextBlock Output;

   // Simulate work. To communicate with objects on the UI thread, get the 
   // Dispatcher for one of the UI objects. Use the Dispatcher object's 
   // BeginInvoke method to queue a delegate that will run on the UI thread,
   // and therefore can safely access UI elements like the TextBlock.
   public void DoMoreWork()
   {
      Output.Dispatcher.BeginInvoke(delegate () {
         Output.Text += String.Format("Instance thread procedure. Data={0}\n", Data);
      });
   }
}

// This code example produces the following output:
//
//Instance thread procedure. Data=42


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2016 Microsoft