计时器回调未在 1 秒延迟 C# 时调用
本文关键字:延迟 调用 回调 计时器 | 更新日期: 2023-09-27 17:56:59
我只是尝试在 1 秒延迟后执行一个方法。
此方法只应调用一次。
遵循这些示例来尝试实现我想要的,但无济于事:
- 乔恩·斯基特的回答
- 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
Timer
不是自我维持的 - 你需要保留对它的引用,否则它会消失。由于在您的案例中它是本地的,因此在您的方法结束之前就有资格收集它。
你似乎缺少一个 Timer.Start(),所以你的计时器不会触发,你还没有启动它