-2

这是我的 Windows 服务代码......但不幸的是,方法 myTimer_Elapsed() 仅在至少 60 秒时被调用。启动服务后。为什么切换服务后不立即启动?

public partial class MyService : ServiceBase
{
    private System.Threading.Thread myWorkingThread;
    private System.Timers.Timer myTimer = new System.Timers.Timer();

    protected override void OnStart(string[] args)
    {
        myWorkingThread = new System.Threading.Thread(PrepareTask);
        myWorkingThread.Start();
    }

    private void PrepareTask()
    {
        myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
        myTimer.Interval = 60000;
        myTimer.Start();
        System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
    }

    void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        ..my code to prepare binary db files
    BinaryDB rdr = new BinaryDB();
    rdr.ReadFile(...)
    }

}
4

1 回答 1

1

这是因为定时器间隔设置为 1 分钟。请参阅 PrepareTask 中的以下代码

myTimer.Interval = 60000;

您可以将其设置为任何适当的值。或者,如果您希望您的代码在开始时返回一次,然后每 60 秒返回一次,那么您应该在OnStart方法中调用它一次。喜欢

protected override void OnStart(string[] args)
{
    // Do other initialization stuff...
    EvalutateChangeConditions ();
    // Create the thread and tell it what is to be executed.
    myWorkingThread = new System.Threading.Thread(PrepareTask);

    // Start the thread.
    myWorkingThread.Start();
}
于 2013-08-10T08:11:48.050 回答