计时器只有在窗体关闭后才会启动

本文关键字:启动 窗体 计时器 | 更新日期: 2023-09-27 18:07:25

我目前正在开发一个c#应用程序,该应用程序运行在Windows CE 5设备上,使用MS Compact Framework 2.0。在这个应用程序中,我通过BeginInvoke:

从一个键盘钩子异步调用一个单例对话框。
this.BeginInvoke((ThreadStart)delegate()
{
    DlgX.getInstance().display(TaskController.getInstance().getActiveTask().getValues(), true);
});

在对话框的显示方法中,我想将焦点设置为某个控件。由于Win CE设备非常慢,我不得不使用计时器来延迟Focus()的执行:

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 600;
timer.Enabled = true;
timer.Tick += (EventHandler)delegate(object obj, EventArgs args)
{
    button1.Focus();
    timer.Dispose();
};

不幸的是,这不起作用。当我关闭对话框时,计时器就会被执行。我做错了什么?

提前感谢您的帮助!

编辑:这是对话框的整个display()方法:

public void display(List<InputRow> fvList, bool validate)
{
    this.fvList = fvList;
    ctlCount = (fvList.Count > 5 ? 5 : fvList.Count);
    for (int i = 0; i < ctlCount; i++)
    {
         //some 100% irrelevant stuff
    }
    button1.KeyDown += new KeyEventHandler(btnOK_KeyDown);
    button1.Click += new EventHandler(btnOK_Click);
    if (!this.Visible)
    {
        ShowDialog();
    }
    if (validate)
    {
        System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
        timer.Interval = 600;
        timer.Enabled = true;
        timer.Tick += (EventHandler)delegate(object obj, EventArgs args)
        {
            button1.Focus();
            timer.Dispose();
        };
    }
}

计时器只有在窗体关闭后才会启动

定时器实例化和启用在关闭表单时进行评估,因为ShowDialog同步的。你应该把计时器放在ShowDialog