C#でマルチスレッド化するためのThreadクラスの詳細説明

零下一度
リリース: 2017-06-23 16:51:42
オリジナル
4799 人が閲覧しました

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 のパラメーターなしのメソッドを定義します。

rreee

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字段}
ログイン後にコピー
2 番目の方法を使用します: まずクラスをカスタマイズします。

        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);            
        }
ログイン後にコピー
次に、メインスレッド (必要な場合) に Thread を作成し、インスタンス メソッド
TdHelper.ThreadFun()

をコンストラクターのパラメーターとして使用します。

    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
の場合、3 つの文の完全な出力が表示されます。コンソール情報; ただし、

が 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート