Существует ли эквивалент QTimer :: singleShot в C # Windows Forms? - PullRequest
3 голосов
/ 18 октября 2011

Есть ли аналог следующей статической функции из библиотеки Qt в Windows Forms?

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();         

Ответы [ 2 ]

6 голосов
/ 19 октября 2011

QTimer - это синхронный таймер, как и таймер Winforms. Threading или один из других классов Timer - это , а не заменитель. Единственный снимок легко реализовать, просто установите для свойства таймера Enabled значение false в обработчике событий Tick. Нет опасности гонки:

    private void timer1_Tick(object sender, EventArgs e) {
        ((Timer)sender).Enabled = false;
        // etc..
    }
0 голосов
/ 18 октября 2011

Как насчет System.Threading.Timer ?Используйте один из конструкторов с параметром period и укажите соответствующий параметр.

...