System.Threading.Thread クラスを使用して、スレッドを作成および制御します。
一般的に使用されるコンストラクターは次のとおりです:
// 摘要: // 初始化 System.Threading.Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。//// 参数: // start:// System.Threading.ParameterizedThreadStart 委托,它表示此线程开始执行时要调用的方法。//// 异常: // System.ArgumentNullException:// start 为 null。 [SecuritySafeCritical]public Thread(ParameterizedThreadStart start);//// 摘要: // 初始化 System.Threading.Thread 类的新实例。//// 参数: // start:// System.Threading.ThreadStart 委托,它表示此线程开始执行时要调用的方法。//// 异常: // System.ArgumentNullException:// start 参数为 null。 [SecuritySafeCritical]public Thread(ThreadStart start);
1. パラメーターなしでスレッドを作成します
ThreadStart デリゲート は、戻り値の型が void のパラメーターなしのメソッドを定義します。
Output結果:
lambda式を備えたアピールコードでreplace threadfun()スレッドを使用する簡単な方法にするために:
public void Main() { Thread vThread = new Thread(ThreadFun);//vThread.Name = "td_Name"; // 线程名称vThread.Start(); //开始执行线程Console.WriteLine("This is the main thread:id=" + Thread.CurrentThread.ManagedThreadId); }void ThreadFun() // 来自委托:ThreadStart { Console.WriteLine("Running in a new thread:id=" + Thread.CurrentThread.ManagedThreadId);for (int i = 0; i < 10; i++) { Console.Write("."); Thread.Sleep(500); } Console.WriteLine("THREAD END"); }
2。そこでスレッドを与えますパラメーター を渡すには 2 つの方法があります。1 つは、
ParameterizedThreadStart デリゲート でメソッド パラメーターを使用して Thread を構築する方法で、もう 1 つはカスタム クラスを作成し、スレッド メソッドをインスタンス メソッドとして定義する方法です。そのため、最初に初期化します。スレッドを開始する前のインスタンスデータ。 例: パラメータの受け渡し
public void Main() { Thread vThread = new Thread(() =>{ Console.WriteLine("Running in a new thread");});//vThread.Name = "td_Name"; // 线程名称vThread.Start(); //开始执行线程Console.WriteLine("This is the main thread"); }
public struct TdData // 传递数据 {public string Message; //数据string字段}
public void Main() { TdData tData = new TdData() { Message = "Thread Info" }; Thread vThread = new Thread(ThreadFun); vThread.Start(tData); // 开始执行线程,传递参数Console.WriteLine("This is the main thread"); }void ThreadFun(object pObj) // 来自委托:ParameterizedThreadStart { TdData vData = (TdData)pObj; Console.WriteLine("In a new thread, Received:{0}", vData.Message); }
をコンストラクターのパラメーターとして使用します。
public class TdHelper {public TdData mData; // 传递数据// 构造函数public TdHelper(TdData pData) {this.mData = pData; }public void ThreadFun() // 来自委托:ThreadStart { Console.WriteLine("In a new thread, TdDataMessage:{0}", mData.Message); } }
3. バックグラウンドスレッド デフォルトでは、Thread クラスによって作成されたスレッドはフォアグラウンド スレッドであり、スレッド プール内のスレッドは常にバックグラウンド スレッドです。フォアグラウンド スレッドが 1 つ実行されている限り、アプリケーション プロセスは実行されます。複数のフォアグラウンド スレッドが実行されて Main() メソッドが終了した場合、アプリケーションはすべてのフォアグラウンド スレッドがタスクを完了するまでアクティブのままです。
Thread クラス インスタンスの
IsBackground属性を設定することで、バックグラウンド スレッドにすることができます。
IsBackground 属性のデフォルトが falseが true
に設定されている場合、メインスレッドMain()の実行が完了し、3番目のメッセージ(Title2)が出力される前にコンソールウィンドウが自動的に閉じます。 4. スレッドの優先度
Priority 属性を使用して、Thread クラス インスタンスの優先度を調整できます。デフォルトは次のとおりです。 : 最高 > 正常以上 > 正常 > 最低5. Thread オブジェクトの Start() メソッドを呼び出してスレッドを作成します。ただし、Start() メソッドを呼び出した後、新しいスレッドはまだ実行状態ではなく、未開始状態になります。スレッドは、オペレーティング システムのスレッド スケジューラがスレッドの実行を選択した場合にのみ、実行状態に変わります。 Thread.ThreadState プロパティを通じて、スレッドの現在の状態を取得できます。
Thread.Sleep() メソッドを使用すると、スレッドは WaitSleepJoin 状態になり、Sleep() メソッドで定義された時間が経過すると、スレッドはオペレーティング システムによって再びスケジュールされるまで待機します。 スレッドを停止するには、Thread.Abort() メソッドを呼び出します。このメソッドを呼び出すと、終了コマンドを受け取るスレッドで ThreadAbortException がスローされます。ハンドラーを使用してこの例外をキャッチすると、スレッドは終了する前にクリーンアップ作業を完了できます。 Thread.Abort() メソッドの呼び出しの結果として ThreadAbortException 例外を受信した後も、スレッドは動作を継続することもできます。スレッドがリセットされずに終了した場合、終了要求を受け取ったスレッドのステータスは AbortRequested から Aborted に変わります。 スレッドが終了するのを待ちたい場合は、Thread.Join() メソッドを呼び出すことができます。これにより、現在のスレッドが停止され、結合されたスレッドが完了するまで WaitSleepJoin 状態に設定されます。参照:
[]以上がC#でマルチスレッド化するためのThreadクラスの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。