0

イベントをスケジュールする方法。たとえば、特定の秒ごとにアクションを実行するメソッドを呼び出す必要があります。シンプルなWindowsフォームアプリを開発中、こんな感じで使ってみました

while(true)
{
 methodToBeScheduled();
 Thread.Sleep(60000);
}

この特定のコードにより、実行中にアプリケーションが「応答しなくなります」。タイマーがこれまたは専門家が提案する他のロジックを実行できることを願っています。親切に教えてください。

ありがとう!

4

4 に答える 4

2

WinFormsタイマーを使用できます:

Timer _timer;

// In constructor (or anywhere you want to start the timer, e.g. a button event):
_timer = new Timer();
_timer.Interval = 60000;    // milliseconds
_timer.Tick += (sender, e) => methodToBeScheduled();
_timer.Start();

これによりmethodToBeScheduled、およそ 60 秒ごとに 1 回呼び出されます。これはメインの UI スレッドで呼び出されるため、負荷の高い処理は避けてください。

このタイマーを使用する利点は、組み込みであること、スレッド同期を必要としないこと、そして使いやすいことです。欠点は、間隔が正確でないことです。実際の間隔は、アプリケーションで処理する必要がある他のメッセージによって異なります。また、10 ~ 20 ミリ秒または 10 ミリ秒の精度しかない Windows システム クロックにも左右されます。それで。

于 2013-06-02T04:42:51.720 に答える
1

Timer(System.Threading.Timer)を使用できます。

using System;
using System.Threading;

Timer _timer = null;


_timer = new Timer(o =>
    {
        methodToBeScheduled();
    });
_timer.Change(TimeSpan.Zero, TimeSpan.FromSeconds(60));
于 2013-06-02T04:45:45.460 に答える
1

Var sequence = Observable.interval(1).publish Sequence.subscribe ....

毎秒 onnext を起動するオブザーバブルをサブスクライブできるようにします。リアクティブ拡張を参照してください。

iPadでタイピングするのが嫌い....

于 2013-06-02T04:48:26.517 に答える
0

はい、.net には 3 種類のタイマーがあります (いずれもタイマーという名前ですが、動作が少し異なります)。windows.forms タイマーは、特定の速度で関数を実行します。つまり、UI スレッドから関数を呼び出します。System.Threading Timer は同じことを行いますが、別のスレッドから関数を呼び出します。頭のてっぺんから覚えていない別のタイマーがあります。状況に応じて、それらのいずれかを選択する必要があります。

糸通しタイマーがお気に入りです。使用方法の例を次に示します。呼び出しているものはすべて、UI スレッドから実行されるわけではないことに注意してください。問題がある場合は、フォームタイマーを使用するか、物事を同期することをお勧めします。

于 2013-06-02T04:45:32.373 に答える