0

助けが必要なようです(再び:/)。私の実際の問題はタイマーです。n 秒ごとに特定の関数を実行するタイマーを作成しました。これまでのところすべてが機能していますが、関数は時間の経過とともに実行されるようです。なぜ私はそれを期待するのですか?さて、何が起こっているのかを確認するためにいくつかの Console.Writes を実行しましたが、Timer がすべてを同時に 2 回実行しているように見えることがあります ...

多分私の出力コンソールの一例:

Start_Monitoring  [ 06.09.2013 11:16:18 ]
 Stop_Monitoring  [ 06.09.2013 11:16:18 ]
Start_Monitoring  [ 06.09.2013 11:16:23 ]
__StopMonitoring
Start_Monitoring  [ 06.09.2013 11:16:32 ]
 Stop_Monitoring  [ 06.09.2013 11:16:32 ]
Start_Monitoring  [ 06.09.2013 11:16:32 ]
 Stop_Monitoring  [ 06.09.2013 11:16:32 ]
Start_Monitoring  [ 06.09.2013 11:16:37 ]
 Stop_Monitoring  [ 06.09.2013 11:16:37 ]
Start_Monitoring  [ 06.09.2013 11:16:37 ]
 Stop_Monitoring  [ 06.09.2013 11:16:37 ]

監視の開始/停止は、タイマーによって実行される関数の上部と下部にある Console.Write です。__StopMonitoring は、実行されたタイマーを停止する関数を意味します。コード部分に続いて:

    public void Start_Monitoring()
    {
        Console.Write("Start_Monitoring  [[[[[[[[[[[[[[[[[[[[[ " + System.DateTime.Now + " ]]]]]]]]]]]]]]]]]]]\n");
        
        /* something will be done here ... */

        if (iCount_Popups > 0)
        {
            Stop_Monitoring();
            return;
        }
        else
        {
            /* something will be done here ... */
        }
        Console.Write("Stop_Monitoring  [[[[[[[[[[[[[[[[[[[[[ " + System.DateTime.Now + " ]]]]]]]]]]]]]]]]]]]\n\n\n\n\n");
    }

    public void Stop_Monitoring()
    {
        Console.Write("__StopMonitoring\n");
        myTimer.Stop();
    }

    // === #TIMER# ==================================================

    public System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
    
    public void CreateTimer()
    {
        myTimer.Tick += new EventHandler(Timer_Event);
        myTimer.Interval = GeneralSettings.AdlibInterval;
        myTimer.Start();
    }

    public void Timer_Event(Object myObject, EventArgs myEventArgs)
    {
        Start_Monitoring();
    }
    // =========================================================================

この Code-Parts で十分な助けが得られるかどうかはわかりませんが、そうでない場合は、お知らせいただければ幸いです。

また、Timer.Interval を操作しようとしました。GeneralSettings.AdlibInterval は 5000 (ミリ秒) です。インターバルで行うべきことは、インターバルよりも多くの時間が必要であるという問題についてはすでに考えました。それはここの問題ではありません。私が見ることができる最大所要時間は 1 秒だったので、2 秒としましょう。しかし、たとえば、少なくとも 10000 ミリ秒の間隔は、このアプリケーションを使用するための方法です。

多分他の情報: 環境は Microsoft Visual Studio 2012 Express - Windows Desktop です Windows-Form-Application ...そして私自身の最初の C# プロジェクトです。したがって、私はいくつかの調査を行ったことを保証しますが、ほとんどの場合、誰もがそこにコードを投稿し、開発者が間違いを犯したため、解決策を得ることができませんでした.

編集:

    public void button1_Click(object sender, EventArgs e)
    {    
        CreateTimer();
    }
4

2 に答える 2

2

CreateTimer メソッドは、ボタンをクリックするたびに別の Tick ハンドラーを追加しているため、tick イベントはボタン 1 をクリックした回数だけ呼び出されます。

フォーム デザイナーまたはフォームの初期化/表示メソッドで間隔とティック ハンドラーを設定します。

于 2013-09-06T09:56:01.733 に答える