2013-04-05 77 views
1

我目前正在使用MS Compact Framework 2.0在Windows CE 5设备上运行的C#应用​​程序。 在本申请中我请从键盘钩一个单对话框异步经由BeginInvoke的:计时器仅在窗体关闭后才启动

this.BeginInvoke((ThreadStart)delegate() 
{ 
    DlgX.getInstance().display(TaskController.getInstance().getActiveTask().getValues(), true); 
}); 

在对话框的显示方法我想将焦点设置在一定的控制。随着Win CE的设备是很慢的,我必须使用定时器延迟对焦()执行:

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(); 
}; 

可惜,这是行不通的。关闭对话框后,计时器立即执行。 我在做什么错?

非常感谢您的帮助!

编辑: 这是对话的整个显示器()方法:

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(); 
     }; 
    } 
} 
+0

您是否意味着表单关闭时触发事件? 我想这个代码是在'Form.Closing'? 600以毫秒为单位,事件发生得很快,您是否尝试过提高到2s? – 2013-04-05 08:06:07

+0

我尝试了5000ms的时间间隔,在关闭对话框后5秒钟发生滴答。 它在Form的display()方法中执行。我将编辑显示fnc的整个代码到我的文章中。 – cutze 2013-04-05 08:12:46

+0

调试器是否去你的定时器声明? 我认为它卡在'ShowDialog'中,因此阻止了你的计时器的启动。因此,在关闭对话框后启动计时器,对我来说这似乎很正常:o。 或者我不明白你的问题.. – 2013-04-05 08:21:40

回答

3

计时器实例,当你关闭你的形式实现评估,因为ShowDialog同步。您应该将您的计时器放在您的ShowDialog

+1

或使用'Show()'。 – MoonKnight 2013-04-05 08:30:09

相关问题