【问题标题】:continue of timer after closing the form关闭表单后继续计时器
【发布时间】:2016-01-28 19:00:12
【问题描述】:
var startTime = DateTime.Now;

var timer = new Timer() { Interval = 1000 };

timer.Tick += (obj, args) =>
    label14.Text =
        (TimeSpan.FromMinutes(Convert.ToDouble( comboBox3.Text)*60) - (DateTime.Now - startTime))
        .ToString("hh\\:mm\\:ss");
MessageBox.Show("Timer started");
timer.Enabled = true;

在按下按钮时以特定形式设置计时器,我希望计时器在关闭表格后继续计算时间以便给我通知。 但是当关闭表单时计时器停止, 有什么想法吗?

【问题讨论】:

  • 将计时器设为静态
  • 您从哪里打开表单?
  • 你需要在合适的范围内定义定时器。也许在主要形式?
  • 您能否发布一个显示问题的完整代码示例。我无法复制它。它是在调试期间发生的,还是仅在 VS 之外的可执行文件中发生?

标签: c# winforms timer


【解决方案1】:

您不能“关闭”表单并让 Timer 对象仍然工作(如果您在主表单上调用计时器)。 (这就像说我无法单击按钮并在关闭表单后运行函数)。但是,在 OnFormClosing 参数上,您可以使用 form.Visible = false 并取消表单的实际关闭。见这里:Timer doesn't fire after Form closed

如果您想真正关闭表单并让它运行,一种选择可能是考虑创建一个任务计划程序对象,该对象将在特定时间完成任务。

【讨论】:

  • @Rahul 没有。整个应用程序正在结束,所以这行不通。
【解决方案2】:

快速点击:改为调用“Hide()” - 这将使计时器保持运行。

现在已经不存在了,您仍然可以将计时器设为静态 - 理想情况下将其放在一个完全独立的类中,或者,如果您坚持,可以在主窗体上将其设为静态。然后让您的通知代码位于您的主窗体上。

您仍然可以为该特定表单上的 Tick 事件添加侦听器,并记住在隐藏表单时将其删除(即Tick -= your_label_event_handler

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多