*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

<C#>
System.Threading.Timerサンプルにおいて、AutoResetEventクラスを使うサンプル例2の第3ステップ

 --- 処理結果が一度にまとめて出力される問題に対して、改善を行なったサンプル」のコード No.8


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

.






元のページ


元ページ

「<C# > System.Threading.Timerサンプルにおいて、AutoResetEventクラスを使うサンプル例2の第3ステップ

 --- 処理結果が一度にまとめて出力される問題に対して、改善を行なったサンプル
http://note.chiebukuro.yahoo.co.jp/detail/n347304

記述量上限の制限で、ページを分けて記述しています。





本ページの前のページ


System.Threading.Timerサンプルにおいて、AutoResetEventクラスを使うサンプル例2の第3ステップ

 --- 処理結果が一度にまとめて出力される問題に対して、改善を行なったサンプル」のコード No.7
http://note.chiebukuro.yahoo.co.jp/detail/n351554

記述量上限の制限で、ページを分けて記述しています。





本ページの次のページ


System.Threading.Timerサンプルにおいて、AutoResetEventクラスを使うサンプル例2の第3ステップ

 --- 処理結果が一度にまとめて出力される問題に対して、改善を行なったサンプル」のコード No.9
http://note.chiebukuro.yahoo.co.jp/detail/n351556

記述量上限の制限で、ページを分けて記述しています。










はじめに


元ページの

「<C#> System.Threading.Timerサンプルにおいて、AutoResetEventクラスを使うサンプル例2の第3ステップ

 --- 処理結果が一度にまとめて出力される問題に対して、改善を行なったサンプル」

におけるコードをここに記述します。








加算演算クラスのソースコードNo.4




using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



// System.Threading.Timerサンプルにおいて、AutoResetEventクラスを使うサンプル例2の第3ステップ

//  --- 処理結果が一度にまとめて出力される問題に対して、改善を行なったサンプル

namespace ThreadTimerAndAutoResetEvent_Sample2_Step3

{

    // ************************************

    // ************************************

    // 加算演算クラス

    //  --- カウンターの値で演算をしたり、カウンターを制御するクラスです。

    // ************************************

    // ************************************

    public partial class AddCounterThreadController

    {



        //============

        // タイマーにより一定時間間隔で起動するイベントプロシージャ

        public void timer1_Tick(object sender, TimerCallbackMethodParameter Callback_Parameter)

        {


            // 引数の取得

            TimerThreadParameter User_Parameter = (TimerThreadParameter)Callback_Parameter.UserParameter;



            //------------------------

            // カウンターをリセットして、そしてメインスレッド

            // をシグナル状態にする。

            //------------------------



            // カウンターの値が、カウンター最大値に到達した場合

            if (Callback_Parameter.InvokeCount == maxCount)

            {


                // スレッドタイマー管理クラスでのinvoke回数のカウンター

                // を零にリセットする。

                InvokeCount = 0;



                // AutoResetEventをシグナル状態にする。

                // すなわち、呼び出し元スレッドのロックを解除して、呼び出し

                // 元スレッドの実行再開の許可をする。

                User_Parameter.autoEvent.Set();


            }



            //------------------------

            // 計算処理(カウンター値での制御演算)

            //------------------------



            // 演算値2の取得

            // ユーザー入力による演算値2と、

            // スレッドタイマー管理クラスでのinvoke回数カウンター値

            // を加算して計算処理用演算値2を取得する。

            float Data_2_Work = User_Parameter.data2 + (Callback_Parameter.InvokeCount - 1);



            // 計算をする(目的の処理)

            float ans = User_Parameter.data1 + Data_2_Work;




            //------------------------

            // 処理結果の出力

            //------------------------



            // 処理結果格納用引数の作成

            CalculationResultParameter Timer_Para = new CalculationResultParameter();

            Timer_Para.InvokeCount = Callback_Parameter.InvokeCount;    // invoke回数のカウンター

            Timer_Para.data1 = User_Parameter.data1;        // 演算値1

            Timer_Para.InitialData2 = User_Parameter.data2; // 演算値2(初期値)

            Timer_Para.CurrentData2 = Data_2_Work;          // 演算値2(現在値)

            Timer_Para.answer = ans;                        // 演算結果



            // 一定時間間隔で起動させるメソッドを実行

            OnTick(Timer_Para);


        }




        //============

        // タイマー開始時に起動するイベントプロシージャ

        public void timer1_TimerStart(object sender, int Interval_Value)

        {

            // タイマー開始時に起動させるメソッドを実行

            OnTimerStart(Interval_Value);

        }




        //============

        // タイマー停止時に起動するイベントプロシージャ

        public void timer1_TimerStop(object sender, int Invoke_Count)

        {

            // タイマー停止時に起動させるメソッドを実行

            OnTimerStop(Invoke_Count);

        }




    }

}





さいごに


本ページの内容説明については、元ページを参照して下さい。