0

次のようなオブジェクトがある場合:

public class MyTask
{
    private Connection _someKindOfConnectionThatShouldStayOpen;

    public MyTask() { ... Opens connection and other stuff } 

    void DoWork(object arg) { ... }
}

オブジェクトを作成し、オブジェクトを破棄せずに DoWork メソッドを定期的に (たとえば毎秒) 実行する小さなアプリケーションを作成したいと考えています。これを行う最善の方法は何ですか?(つまり、最も安全でベスト プラクティス)

4

2 に答える 2

2

確かにTimerを使用できます。タイマーのコールバックは DoWork を呼び出すことができます。

Timer をオブジェクトのプライベート フィールドにします。インスタンス化して、オブジェクトがインスタンス化されたときに開始します。

オブジェクトに IDisposable を実装し、オブジェクトを破棄するときに必ずタイマーを破棄してください。

于 2012-07-26T16:54:25.427 に答える
1

アプリケーションで、MyTask のクラス レベルのインスタンスとタイマーを作成します。タイマーの経過イベントで、必要なメソッドを呼び出します。私はこれに似たようなことをします:

using System.Timers;
using System.Threading;

class Program
{
    static MyTask taskInstance = new MyTask();  
    static ManualResetEventSlim cancelEvent = new ManualResetEventSlim(false);

    static void Main()
    {       
        var timer =  new Timer
        {
            AutoReset = true,
            Interval = 1000
        };
        timer.Elapsed += (x, y) => taskInstance.DoWork();
        cancelEvent.Wait();
    }
}

これは完全ではなく、テストもされていないことに注意してください。アプリケーションを停止する必要があるときはいつでも (ユーザー入力などにより)、cancelEvent.Set(); を呼び出します。

于 2012-07-26T17:00:20.340 に答える