2011-10-18 48 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.. 
    } 
相关问题