2

C#でタイマーを使用して、5秒間隔でメソッドを実行しようとしています。このコードは機能していないようですが。実行してもエラーは発生しませんが、プログラム(コンソールで実行)は直後にシャットダウンしますIP.timer1.Start()。timer1_Elapsedメソッドが実行されることはありません。私は、timer1_Elapsedメソッドの最初の行で、プログラムに文字列をコンソールに出力させようとしたので、それを知っています。

class Program
{
    Timer timer1 = new Timer();

    static void Main(string[] args)
    {
        Program IP = new Program();
        IP.timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
        IP.timer1.Interval = 5000;
        IP.timer1.Enabled = true;
        IP.timer1.Start();

    }

    static void timer1_Elapsed(object sender, ElapsedEventArgs e)
    {
    //Function to get executed each time the counter elapses. 
    }

}
4

4 に答える 4

4

その理由はStart、タイマーのメソッドが別のスレッドでタイマーを開始し、すぐにメソッドから戻るためです。これにより、Mainメソッドが終了し、コンソールがシャットダウンします。

使用しているものに応じTimerて(BCLには同じような名前のクラスがいくつかあります)、修正を別の方法で実装することをお勧めします。使用しているものに応じて、 System.Timers.TimerSystem.Windows.Forms.Timer、またはSystem.Threading.Timerのドキュメントを読むことをお勧めします。

于 2012-06-19T09:44:22.013 に答える
2

プログラムは、main関数が終了した瞬間に終了します。

準備が整うまで、おそらくConsole.ReadLine()を使用して、mainが終了しないようにする必要があります。

于 2012-06-19T09:46:42.867 に答える
0

タイマーは別のスレッドで開始します。タイマーの開始後にユーザーがキーを押すまで、以下を使用してスレッドを一時停止します。

Console.ReadLine(); 
于 2012-06-19T09:45:50.217 に答える
0

プログラムがIP.timer1.Start()の直後に終了する理由は、プログラムがMain()関数の実行を完了し、プログラムが戻るのを妨げるものが何もないためです。

プログラムを実行し続ける簡単な方法が必要な場合は、Console.ReadKey();を追加できます。timer1.Start();の後 そのため、アプリケーションはその関数が戻るまで待機します(つまり、任意のキーを押したとき)。これを行った後、コールバックは指定されたように5秒ごとに呼び出される必要があります。

于 2012-06-19T09:58:39.637 に答える