我可以运行计时器,但它挂起,当我运行背景我需要计时器在后台运行。 任何人都可以说我如何在后台运行计时器。 我的计时器代码是
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)
{
}
任何人都可以请我说如何在后台运行计时器。 提前谢谢。
答案 0 :(得分:2)
您可以使用BackgroundWorker。
处理BackgroundWorker.DoWork以运行计时器。
处理BackgroundWorker.ProgressChanged以处理时间事件。
处理BackgroundWorker.RunWorkerCompleted以停止计时器。
答案 1 :(得分:1)
我认为你所说的是你想要引出背景代码然后让IT定期做一些工作。如果是这样,您需要后台代码中的计时器而不是前端。这意味着使用不同的计时器类 - 在System.Timers,IIRC中。 System.Timers.Timer
答案 2 :(得分:1)
如果你坚持让计时器工作在前端(虽然我不推荐它,我可以理解它在某些情况下更容易),有一种方法(注意:我认为Windows Forms是使用):
在以下代码中,有:
当用户最小化表单时执行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();
}