计时器回调未在 1 秒延迟 C# 时调用

本文关键字:延迟 调用 回调 计时器 | 更新日期: 2023-09-27 17:56:59

我只是尝试在 1 秒延迟后执行一个方法。
此方法只应调用一次。

遵循这些示例来尝试实现我想要的,但无济于事:

  1. 乔恩·斯基特的回答
  2. MSDN 示例

我当前的代码:

private void NetworkIsActive() {
    // delay to allow the network to properly set firs
    AutoResetEvent autoEvent = new AutoResetEvent(false);
    TimerCallback timerDelegate = new TimerCallback(this.CheckInternetConnection);
    TimeSpan delayTime = new TimeSpan(0, 0, 1);
    try {
        Timer updateTimer = new Timer(timerDelegate, autoEvent, delayTime, TimeSpan.FromMilliseconds(-1));
    } catch (ArgumentOutOfRangeException Ex) {
        throw Ex;
    } catch (ArgumentNullException NEx) {
        throw NEx;
    } catch (Exception x) {
        throw x;
    }
}

检查互联网连接()

private void CheckInternetConnection(object state) {
    switch (NetworkActivities.IsInternetAvailable()) {
        case TRUE:
            this.ExternalIP = NetworkActivities.getExternalIP();
            this.InternetConnection = ACTIVE;
            break;
        case FALSE:
            this.ExternalIP = EMPTY;
            this.InternetConnection = INACTIVE;
            break;
    }
}

我也尝试将状态参数设置为 null但没有区别。

从不调用CheckInternetConnection,也不会在try...catch中引发异常

我宁愿让这种方式工作,因为我不赞成使用Thread.Sleep

计时器回调未在 1 秒延迟 C# 时调用

Timer不是自我维持的 - 你需要保留对它的引用,否则它会消失。由于在您的案例中它是本地的,因此在您的方法结束之前就有资格收集它。

你似乎缺少一个 Timer.Start(),所以你的计时器不会触发,你还没有启动它