定期运行实例化对象的方法

时间:2012-07-26 16:50:51

标签: c# multithreading

如果有一个如下所示的对象:

public class MyTask
{
    private Connection _someKindOfConnectionThatShouldStayOpen;

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

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

我想创建一个小应用程序来创建对象并定期运行DoWork方法(比如说每秒),而不会破坏对象。 这样做的最佳方式是什么? (即最安全和最佳实践)

2 个答案:

答案 0 :(得分:2)

你当然可以使用Timer。计时器的回调可以调用DoWork。

让Timer成为对象的私有字段。在实例化对象时实例化并启动它。

为您的对象实施IDisposable,并确保在处理对象时丢弃计时器。

答案 1 :(得分: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();