2013-04-05 57 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

相關問題