You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在指定时间启动线程?程序启动数秒后自动关闭问题如何解决

问题修复方案

1 程序启动立即崩溃的直接问题

你的setUpTimer方法第一行存在无终止条件的自调用,会触发无限递归导致栈溢出,程序直接崩溃退出。

  • 修复方法:直接删除setUpTimer(new TimeSpan(21, 27, 0));这行多余的递归代码即可。

2 程序初始化后数秒自动关闭的核心问题

System.Threading.Timer属于后台线程,后台线程不会阻止宿主进程退出。如果你的程序是控制台等类型,主线程执行完初始化逻辑后没有阻塞逻辑,会直接结束进程,定时任务根本来不及触发。

  • 修复方法:在程序入口主线程末尾添加阻塞逻辑,示例如下:
// 全局定义阻塞事件
private static ManualResetEvent _exitBlocker = new ManualResetEvent(false);

// 主线程所有初始化逻辑完成后添加
_exitBlocker.WaitOne();

如果是控制台程序也可以直接用Console.ReadLine()做简单阻塞。

3 定时逻辑优化

3.1 跨天定时兼容

当前逻辑如果运行时已经过了早上6:40,timeToGo会小于0,直接return不会创建定时器,当天的任务不会执行。需要增加跨天逻辑:

TimeSpan timeToGo = alertTime - current.TimeOfDay;
if (timeToGo < TimeSpan.Zero)
{
  // 当天时间已过,定时到次日同一时间
  timeToGo += TimeSpan.FromDays(1);
}

3.2 定时时间设置

初始化定时器时传入new TimeSpan(6, 40, 0)即可实现早上6:40触发的需求,不要硬编码21:27的时间参数。

4 Selenium执行逻辑修复

你的XPath写法存在语法错误,//[@id='btnConfirm2']缺少元素匹配规则,会抛出元素找不到的异常,修改为//*[@id='btnConfirm2']即可匹配任意id为btnConfirm2的元素。
另外建议把Thread.Sleep(3000)替换为Selenium显式等待,避免网络波动导致元素未加载就执行点击,提升运行稳定性。

内容的提问来源于stack exchange,提问作者Firefox9067

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:45:03