【问题标题】:Is there a QTimer::singleShot equivalent in C# Windows Forms?C# Windows 窗体中是否有等效的 QTimer::singleShot?
【发布时间】:2015-11-17 14:53:36
【问题描述】:

Windows 窗体中的 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();         

【问题讨论】:

    标签: c# winforms qt timer threadpool


    【解决方案1】:

    QTimer 是一个同步定时器,就像 Winforms 定时器一样。线程或其他 Timer 类之一不是替代品。单次很容易实现,只需在 Tick 事件处理程序中将计时器的 Enabled 属性设置为 false 即可。没有比赛的危险:

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

    【讨论】:

      【解决方案2】:

      System.Threading.Timer 怎么样?将one of the constructorsperiod 参数一起使用并相应地指定参数。

      【讨论】:

        猜你喜欢
        • 2015-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多