Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 新分钟开始时运行的方法_C#_Timer - Fatal编程技术网

C# 新分钟开始时运行的方法

C# 新分钟开始时运行的方法,c#,timer,C#,Timer,我有一个每分钟都在运行的函数: var waitHandle = new AutoResetEvent(false); ThreadPool.RegisterWaitForSingleObject( waitHandle, // Method to execute (state, timeout) => { Console.WriteLine(DateTime.Now + " START"); ..some stuff

我有一个每分钟都在运行的函数:

var waitHandle = new AutoResetEvent(false);
ThreadPool.RegisterWaitForSingleObject(
    waitHandle,
    // Method to execute
    (state, timeout) =>
    {
        Console.WriteLine(DateTime.Now + " START");
        ..some stuff
        Console.WriteLine(DateTime.Now + " END");
    },
    null,
    TimeSpan.FromMinutes(1),
    false
);
此代码执行良好,但示例输出为:

2016-08-16 18:45:55 START
2016-08-16 18:45:55 END
2016-08-16 18:46:55 START
2016-08-16 18:46:55 END
(或在呼叫时正好在哪一秒) 我希望它像这样运行:

2016-08-16 18:45:00 START
2016-08-16 18:45:00 END
2016-08-16 18:46:00 START
2016-08-16 18:46:00 END

所以我希望这个函数每分钟运行一次,但是当秒数为0时。我该怎么做呢?

显然,问题是必须添加到代码中的初始偏移量。根据serhiyb链接的问题的第二个答案,可以轻松完成:

void Register(AutoResetEvent waitHandle, TimeSpan timeout, 
    WaitOrTimerCallback callback, bool once)
{
    ThreadPool.RegisterWaitForSingleObject(waitHandle, callback, null, timeout, once);
}

void Callback(object state, bool isTimeout)
{
    Console.WriteLine(DateTime.Now + " START");
    //..some stuff
    Console.WriteLine(DateTime.Now + " END");
}
然后:

var waitHandle = new AutoResetEvent(false);

Register(
    waitHandle,
    TimeSpan.FromSeconds(60 - DateTime.Now.Second), //initial offset
    (state, isTimeout) =>
    {
        Callback(state, isTimeout);
        Register(waitHandle, TimeSpan.FromMinutes(1), Callback, false);
    },
    true);

@serhiyb-我想知道是否有一种方法可以编辑我的代码和RegisterWaitForSingleObject方法来做同样的事情你的问题可以让你清楚你想要什么,为什么你的解决方案不适合你。现在代码有什么问题吗?@Mikemcaughan我编辑过它