2011-10-18 86 views
3

是否有類似於Windows窗體中Qt庫的以下靜態函數?在C#Windows窗體中是否存在QTimer :: singleShot等價物?

http://doc.qt.io/qt-5/qtimer.html#singleShot

我能想出的最好的是以下幾點:

ThreadPool.QueueUserWorkItem((o) => 
{ 
    Thread.Sleep(someNumberOfMilliseconds); 
    DoDelayedWorkHere(); 
}); 

UPDATE

這確實使用System.Windows.Forms.Timer的伎倆。

var timer = new System.Windows.Forms.Timer(); 
timer.Interval = someNumberOfMilliseconds; 
timer.Tick += (o, args) => 
    { 
     timer.Stop(); 
     DoDelayedWorkHere(); 
    }; 
timer.Start();   

回答

6

QTimer是一個同步計時器,就像Winforms Timer一樣。線程或其他Timer類之一是而不是的替代品。單次實現很容易實現,只需在Tick事件處理程序中將計時器的Enabled屬性設置爲false即可。沒有比賽的危險:

private void timer1_Tick(object sender, EventArgs e) { 
     ((Timer)sender).Enabled = false; 
     // etc.. 
    } 
相關問題