ThreadクラスのC#の基礎にスレッドを作成するためのさまざまな方法

スレッドを作成するには1. Threadクラス

許容されるコンストラクタパラメータThreadStartデリゲート(voidを返す関数を定義されていないパラメータ)、及びParameterizedThreadStartデリゲートパラメータ(定義されたオブジェクトパラメータ、関数がvoidを返します)。

 

        静的 ボイドメイン(文字列[]引数)
        { 
            
            Console.WriteLineを(" メインスタート.... " )。
            スレッドT1 = 新しいスレッド(計算)。
            t1.Start(10 )。
            Console.WriteLineを(" メインは終わりました" ); 
            Console.ReadLine(); 
        } 

        プライベート 静的 ボイド計算(オブジェクトOBJ)
        { 
            int型の和= 0 int型の合計=(int型)は、obj;
            以下のためにint型 i = 0 ; iは、合計<I ++の
            { 
                合計 + = I。
                Thread.sleep(100 )。
            } 
             Console.WriteLineを(" 和である" +の合計)。
        }

 

Threadクラスはもちろん、上記と同様の機能を達成するために、ラムダ式で使用することができます。

        静的 ボイドメイン(文字列[]引数)
        { 
            
            Console.WriteLineを(" メインスタート.... " )。
            スレッドT1 = 新しいスレッド((OBJ)=> 
            { 
                int型の合計= 0 ;
                 int型の合計=(INT )OBJ;
                 のためのint型 i = 0 ; iは、合計<; iは++ 
                { 
                    合計 + = I; 
                    のThread.sleep(100 ) ; 
                }
                Console.WriteLineを(合計は +の合計)。
            }); 
            t1.Start(10 )。
            Console.WriteLineを(" メインは終わりました" ); 
            Console.ReadLine(); 
        }

2.バックグラウンドスレッド

限りフォアグラウンドで実行があるとして、アプリケーション・プロセスが実行を停止せず、バックグラウンドスレッドを実行する前に、アプリケーション・プロセスの終わりには影響しません、バックグラウンドスレッドのスレッドの優先順位や他の側面に差はなかったです。バックグラウンドスレッドは、デフォルトでは、スレッドを作成するにはThreadクラスは、フォアグラウンドスレッドがある、あなたはまた、IsBackgroundプロパティを設定することにより、バックグラウンドスレッドを変更し、スレッドプールを作成することができます。以下は、Console.ReadLine();コマンドが無効化され、実行発見コンソールウィンドウはすぐに消えませんが、エンドt1のスレッドの実行を待ちます。

 

        静的 ボイドメイン(文字列[]引数)
        { 
            
            Console.WriteLineを(" メインスタート.... " )。
            スレッドT1 = 新しいスレッド((OBJ)=> 
            { 
                int型の合計= 0 ;
                 int型の合計=(INT )OBJ;
                 のためのint型 i = 0 ; iは、合計<; iは++ 
                { 
                    合計 + = I; 
                    のThread.sleep(100 ) ; 
                }
                Console.WriteLineを(合計は +の合計)。
            }); 
            t1.Start(10 )。
            Console.WriteLineを(" メインは終わりました" );
            // Console.ReadLine(); 
        }

 

3.スレッドの優先順位

優先プロパティによってスレッドの優先順位は、定義されたレベルが最も高い、AboveNormal、BelowNormal、最も低い優先度に応じて、オペレーティング・システムのスレッドスケジューリングを表します。あなたは、実行中の優先度が同じ複数のスレッド、時間とサイクルの量に関する規則の共通語を持っている場合。定義された基本優先順位以下にスレッドが(CPUが待機する必要がありますする必要はありません)CPU集約型である場合は、優先順位。

4.スレッドの制御およびステータス

 ThreadStateスレッドが定義され、すべての可能な実行状態の集合をスレッドが作成されると、それは少なくとも一つの状態で終了されるまで。それは、様々な状態の組み合わせなので、それはあなたがビット演算を使用する必要がある場合、スレッドの現在の状態と判断し、単に(例外があり、状態値をruningては0で、それは操作ではありません)、等号を使用することはできません。

 未開始:)スレッドを作成するが、ファイル名を指定して実行(コールします。

 runingて:スレッドがCPUと呼ばれているファイル名を指定して実行()、呼び出した後。

WaitSleepJoin:スレッド待機、スリープ()を呼び出し、参加は()が終了するまで、現在のスレッドに参加()ブロックの状態を入力するか、スレッドが実行されている呼び出しを中断します。

停止:スレッドが状態に実行した後、この状態は、[スタート]()、再スタートのスレッドを渡すことはできません、あなたがスレッドを再作成する必要があります。

背景:スレッドのIsBackgroundプロパティ後の現在の呼び出し元のスレッドが後のスレッドが作成され、真であると、ステータスは、スレッド状態の終了後に、未開始+背景であり、呼び出し元スレッド状態runingて+背景、睡眠()ステータスWaitSleepJoin +背景の後停止しました。

AbortRequested:スレッドが中止()、ThreadAbortExceptionの前仕上げ加工を呼び出すと、あなたはResetAbort()を呼び出すことができ、運転の停止を取り消します。

中止:スレッドが中止()、ThreadAbortExceptionの後の処理をコールします。

SuspendRequested:スレッドの呼び出しは()を中断すると、スレッドが前に中断されます。

一時停止:スレッドがこの時間利用でき再開()、実行し続けるで中断されています。

制御機能の一般的なスレッドは基本的には、既に、上記されたサスペンド()、再開()はもはや推奨され、スレッドがハングは、スレッドのデッドロックなど、いくつかの予測不可能な問題を引き起こす可能性があるので、あなたは、スレッドの同期のいくつかを使用することができますクラスの代わりに。また、中止は()推奨されていない、あなたの代わりに、ブール状態量を定義することができます。割り込み()上記ませんが、この関数を呼び出した後、InterruptExceptionがあるだろう、そしてWaitSleepJoin状態のスレッドを覚まします。

おすすめ

転載: www.cnblogs.com/change-myself/p/11111259.html