如何在后台工作计时器

本文关键字:工作 计时器 后台 | 更新日期: 2023-09-27 17:55:56

我可以运行计时器,但它挂起了,当我运行后台时,我需要计时器在后台运行。谁能告诉我如何在后台运行计时器。我的计时器代码是

        btnIntraday.Enabled = false;
        btnStartBackfill.Enabled = false;
        btnStop.Enabled = true;
        if (btnIntraday.Text == "Intraday")
        {
            timerIntraday.Interval = 5000;
            timerIntraday.Enabled = true;
            btnIntraday.Text = "Updating..";
        }
        else if (btnIntraday.Text == "Updating..")
        {
            timerIntraday.Enabled = false;
            btnIntraday.Text = "Intraday";
        }

我的后台代码是

        btnIntraday.Enabled = false;
        btnStartBackfill.Enabled = false;
        btnStop.Enabled = true;
        txtInterval.Text = ddTimeInterval.Value.ToString();
        int inter = (int.Parse(txtInterval.Text)) * multiplyingFactorBackfill;
        try
        {
            bgBackfillDCX.RunWorkerAsync();
        }
        catch (Exception ex)
        {
        }    

任何人都可以告诉我如何在后台运行计时器。提前谢谢。

如何在后台工作计时器

您可以使用

BackgroundWorker。

处理 BackgroundWorker.DoWork 以运行计时器。

处理 BackgroundWorker。ProgressChanged 以处理计时事件。

处理 BackgroundWorker.RunWorkerComplete以停止计时器。

我想你的意思是你想设置后台代码,然后让IT定期做一些工作。如果是这样,您需要在后台代码而不是前端中使用计时器。这意味着使用不同的计时器类 - 在System.Timers,IIRC中。 系统.定时器.定时器

如果您坚持让计时器在前端工作(虽然我不推荐它,但我可以理解它在某些情况下更容易),有一种方法(注意:我认为使用 Windows 窗体):

在下面的代码中,有:

  • 引用 System.Windows.Forms.Timer 对象的实例的计时器
  • 一个 notifyIcon 引用实例 System.Windows.Forms.NotifyIcon 对象
  • MainWindow_Resize与窗体的调整大小事件关联的方法
  • notifyIcon_Click与通知图标的单击事件关联的方法

当用户最小化表单时,将执行 resize 方法 if-block(表单在桌面的任何地方都不可见,将 ShowInTaskBar 设置为 false 也会将其从任务栏中隐藏,因此它被有效地隐藏了)。

private void MainWindow_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        this.ShowInTaskbar = false;
        notifyIcon.Visible = true;
    }
}

当用户单击通知图标时,表单的窗口将恢复到其以前的大小和位置,并将表单呈现给用户

private void notifyIcon_Click(object sender, EventArgs e)
{
    notifyIcon.Visible = false;
    this.WindowState = FormWindowState.Normal;
    this.ShowInTaskbar = true;
    this.BringToFront();
    this.Activate();
}