计时器完成后最大化窗口

时间:2014-11-02 11:20:50

标签: c# timer invoke

我想知道在计时器结束后如何最大化主窗体窗口。

假设计时器结束时窗口最小化。

这就是我尝试实现它的方式:

private void timer1_Tick(object sender, ElapsedEventArgs e)
        {
  if (counter[int.Parse(timers[t].ToString())] <= 0)
                {
                    ReadyIndex = int.Parse(timers[t].ToString());

                   Invoke(new Action(() => {
                       this.WindowState = FormWindowState.Normal;
                       this.Show();
                   }));

                    return;
                }
}

我也尝试过:

               Invoke(new Action(() => {
                   base.WindowState = FormWindowState.Normal;
                   base.Show();
               }));

和:

           Invoke(new Action(() => {
               thisForm.WindowState = FormWindowState.Normal;
               thisForm.Show();
           }));

虽然“thisForm”是一个Form1变量,我在Form_Load方法中启动它,如下所示:

private Form1 thisForm;
        private void Form1_Load(object sender, EventArgs e)
        {
                thisForm = new Form1();
        }

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

创建一个名为NowItsTime的公共布尔值并将其设置为false。 当计时器启动时,进行if检查以查看NowItsTime是否为真,否则声明是否为真。

如果是真正的代码:   - 将窗口状态设置为最大化。   - 停止计时器。

其他代码:   - 将NowItsTime设置为true。

简短解释: 它运行一次并在下一次运行时直接停止。

答案 1 :(得分:0)

确定,

我找到了解决方案:

我使用了第一个代码,但我在Show()行和windows更改状态之间切换(代码看起来像这样):

private void timer1_Tick(object sender, ElapsedEventArgs e)
        {
  if (counter[int.Parse(timers[t].ToString())] <= 0)
                {
                    ReadyIndex = int.Parse(timers[t].ToString());

                   Invoke(new Action(() => {
                       this.Show();
                       this.WindowState = FormWindowState.Normal;

                   }));

                    return;
                }
}

操作系统管理事件的方式可能是先处理显示,然后再处理状态。

其他人有更好的解释吗?

感谢您的尝试。