C# Windows Forms中是否有类似于QTimer::singleShot的功能?

4

在Windows Forms中是否有与Qt库中的以下静态函数类似的模拟函数?

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

我能想到的最好的方式是以下内容:

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

更新

使用System.Windows.Forms.Timer可以解决这个问题。

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

6

QTimer是一种同步定时器,就像Winforms Timer一样。Threading或其他计时器类不是替代品。单次触发很容易实现,只需在Tick事件处理程序中将计时器的Enabled属性设置为false即可。不会出现竞态条件的危险:

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接