如何在后台工作计时器

时间:2011-05-11 09:33:02

标签: c#

我可以运行计时器,但它挂起,当我运行背景我需要计时器在后台运行。 任何人都可以说我如何在后台运行计时器。 我的计时器代码是

        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)
        {

        }    

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

3 个答案:

答案 0 :(得分:2)

您可以使用BackgroundWorker

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

处理BackgroundWorker.ProgressChanged以处理时间事件。

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

答案 1 :(得分:1)

我认为你所说的是你想要引出背景代码然后让IT定期做一些工作。如果是这样,您需要后台代码中的计时器而不是前端。这意味着使用不同的计时器类 - 在System.Timers,IIRC中。 System.Timers.Timer

答案 2 :(得分:1)

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

在以下代码中,有:

  • 指向System.Windows.Forms.Timer对象
  • 实例的计时器
  • 一个引用System.Windows.Forms.NotifyIcon对象实例的notifyIcon
  • 与表格
  • 的Resize事件相关联的MainWindow_Resize方法
  • 与notifyIcon的Click事件相关联的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();
}