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 回答