1

クラスライブラリでタイマーを実行するために次のコードを試しましたが、timer_Elapsed は起動しませんでした。System.Windows.Forms のタイマーも使用してみましたが、うまくいきませんでした。

private static void SetTimer(DateTime dateTime)
{
    timer = new System.Timers.Timer();
    TimeSpan timeSpan = dateTime - DateTime.Now;
    timer.Interval = timeSpan.Milliseconds;
    timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    timer.Enabled = true;
    timer.Start();
}

private static void timer_Elapsed(object myobject, System.Timers.ElapsedEventArgs e) 
{ 
    timer.Enabled = false; 
    timer.Stop(); 
    Start(_appCastURL, _remindLaterAt, _remindLaterFormat); 
}
4

4 に答える 4

2

あなたはそれをしなければならないでしょう.Start():)

于 2012-05-16T07:55:28.460 に答える
2

フォーム ベースのタイマーは機能しません。ティック イベントを処理するには、アクティブなメッセージ ポンプを実行する必要があります。

System.Timers.Timerは意図したとおりに機能しますが、Start( 経由で) それを有効にするか有効にした場合のみですEnabled = true。デフォルトでは、Elapsedイベントは任意のスレッドで発生することに注意してください。ThreadPoolこのプロパティを使用してSynchronizingObject、イベントが実行されるスレッドを制御できます。

于 2012-05-16T07:58:34.203 に答える
0

タイマー宣言から Static を削除し、イベントと SetTimer メソッドから static を削除し、クラス ライブラリの Form を拡張するクラスに配置すると、機能しました。

private void SetTimer(DateTime remindLater)
{
    timer = new System.Timers.Timer();
    TimeSpan timeSpan = remindLater - DateTime.Now;
    timer.Interval = (int) timeSpan.TotalMilliseconds;
    timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    timer.Start();
}

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    timer.Stop();
    AutoUpdater.Start(appCast, remindLaterAt, remindLaterFormat);
}
于 2012-05-20T05:34:46.767 に答える
-1

System.Threading.Timer を使用してみてください

于 2012-05-16T07:56:47.480 に答える