我目前正在使用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();
};
}
}
您是否意味着表單關閉時觸發事件? 我想這個代碼是在'Form.Closing'? 600以毫秒爲單位,事件發生得很快,您是否嘗試過提高到2s? – 2013-04-05 08:06:07
我嘗試了5000ms的時間間隔,在關閉對話框後5秒鐘發生滴答。 它在Form的display()方法中執行。我將編輯顯示fnc的整個代碼到我的文章中。 – cutze 2013-04-05 08:12:46
調試器是否去你的定時器聲明? 我認爲它卡在'ShowDialog'中,因此阻止了你的計時器的啓動。因此,在關閉對話框後啓動計時器,對我來說這似乎很正常:o。 或者我不明白你的問題.. – 2013-04-05 08:21:40