非同期マルチスレッド(B)スレッド

Theread

コンセプト

 C#オブジェクトにスレッドパッケージシールタイプライブラリ

 

スレッドのインスタンス化と呼び出し

 最初:

  単にスレッド実行方法をする必要があります渡すスレッド

スレッドスレッド=新しいスレッド(のtestMethod); // 实例化スレッド

  thread.Start(); // オープンスレッド実行方法。

 

第2

 使用するラムダ式を

 

 スレッドスレッド=新しいスレッド(S =>

 {

     Console.WriteLineを( " HA ");

 }          

 );

 thread.Start();

 

第三の

システムパッケージでスレッドクラス

私たちは見ることができないスレッドを受信する必要があるThreadStartの信頼の戻り値なしで、実際には、パラメータの種類、およびこのタイプをしてから見下ろす無引数を

 

   // ThreadStartの手数料は、パラメータと戻り値ではありません

   ThreadStart threadStart =()=>

    {

        Console.WriteLineを( " 测试");

    }。

 

   =新しいスレッド(threadStart)をthreadRunStartスレッド。

   threadRunStart.Start();

 

 

スレッド一般的な方法を

待って

1つの分析スレッドThreadState

   ThreadState の初期状態未開始(起動しません

 

   しばらく(thread.ThreadState!= ThreadState.Stopped)

{

   Thread.sleep(200); // 現在のスレッドのブレーク200msの

}

 

2参加待っています

thread.Joinは(); // を待って、このコードのスレッドを実行するスレッドが完了するまでに

thread.Join(1000); // まで待って1000ミリ秒

 

最高の優先順位

優先順位は、しかし、完了するために優先順位表すものではありません  、でも極端な例で言うと

このスレッドで実行順序を制御しない事故があり、

thread.Priority = ThreadPriority.Highest。

 

フロントとバックのスレッド

  フォアグラウンドスレッド

thread.IsBackground =偽; // デフォルトはfalseをフォアグラウンドスレッド、プロセスが閉鎖され、スレッドが唯一の出口の後に計算する必要があります

 

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

thread.IsBackground =真; // プロセスを閉じ、糸出口

 

明確の理解とスレッドの使用を容易にするために、パッケージの2つの簡単な例を次のようにします

要件の説明:コールバック:プロモーターのスレッドがアクションBを実行するために、サブスレッドの実装後のアクションA-- -A-の実施を阻止しません

 

 

 

            #regionの使用スレッド封装回调

            { 
                ThreadStart threadStart =()=> この .DoSomethingLong(" をbutton3_Click " )。
                アクションactionCallBack =()=> 
                  { 
                      のThread.sleep(2000 ); 
                      Console.WriteLineを($ " {これはCalllback Thread.CurrentThread.ManagedThreadId.ToStringある(" 00 " )} " ); 
                  }。
                この.MethodThread(threadStart、actionCallBack)。
            } 
            #endregion

 

 

        // コールバック:プロモータースレッドはアクションB実行するサブスレッドの実装後に作用A-- -A-の実装を妨げない
        ///  <まとめ> 
        /// 方法は、発信者が実行のスレッドを渡し:アイデアを
         /// 転写スレッドBを実行する方法
         ///  </要約> 
        ///  <PARAM NAME = "threadStart"> </ PARAM> 
        ///  <PARAM NAME = "アクション"> </ PARAM> 
        公共 ボイドMethodThread(threadStart threadStartをアクションアクション)
        { 
            // エラーの典型的な理由:この方法は、ブロックされているため
             // スレッド新しい新しい=スレッド(threadStartスレッド);
             // Thread.Start();
             // Thread.join();
             // action.Invoke() ;
             // 特定のアイデア:
            //ThreadStartパラメータとアクションパラメータは、戻り値委託ませんされていません
             。// 最初に来る呼び出しを実行する必要があり、実行待ちが終了した後、次の起動実行される
             // ThreadStartラップでは、方法として渡され、連続的に満足して行われ、そしてません詰まら 
            ThreadStartの_startを= 新しい新しいThreadStart( 
                () => { 
                    threadStart.Invoke(); 
                    action.Invoke(); 
                } 
                ); 
            新しい新しいスレッド(_start).Start(); 
        }

 

 

 

要件の説明:1、非同期は、非ブロッキングが最終結果に到達2'll

            #regionの非同期呼び出しカプセル化された使用糸は、値を返す
            { 
                のFunc < int型 > FUNC =()=> 
                { 
                    のThread.sleep(5000 );
                     戻る; DateTime.Now.Year 
                }; 
                FUNCキー < 整数 > = funcThread この .ThreadWithReturn(FUNC) ; // 非ブロック

                int型 iResult = funcThread.Invoke(); // 閉塞、本当に結果を取得する必要があります。
            }
             #Endregion

 

        ///  <まとめ> 
        /// 1、非同期、非ブロッキング
         /// 2は、最終的な計算結果を得ることができる
         ///  </要約> 
        ///  <typeParam名= "T"> </ typeParam> 
        // /  <PARAM NAME = "FUNC"> </ param>の
        ///  <リターン> </リターン> 
        プライベートのFunc <T> ThreadWithReturn <T>(機能<T> FUNC)
        { 

            // アイデアの実現:戻り値を渡しますジェネリックデリゲート
             // ThreadStartデリゲート包まスレッドと、スレッドの開始を渡すとは
             // ジェネリックデリゲートの戻り値を返す

            T T = デフォルト(T)を、
            ThreadStart threadStart = 新しい新しい ThreadStart(()=>
            {
                トン= Func.Invoke(); 
            }); 
            スレッドのスレッドは = 新しい新しいスレッド(threadStart); 
            Thread.start(); 
            // Invokeメソッドなしで実行されない手数料は
             // 呼び出し側が等デリゲート、最初のスレッドの実行を呼び出すまで待ちます、および次いで(ブロッキング)を返す
            戻り 新しい新規のFunc <T>(()=> 
            { 
                Thread.joinを(); 
                戻りTを; 
            ;})
        }

 

おすすめ

転載: www.cnblogs.com/JohnTang/p/10987485.html
おすすめ