#c# #winforms #qt #timer #threadpool
#c# #winforms #qt #таймер #пул потоков
Вопрос:
Есть ли аналог следующей статической функции из библиотеки Qt в Windows Forms?
http://doc.qt.io/qt-5/qtimer.html#singleShot
Лучшее, что я могу придумать, это следующее:
ThreadPool.QueueUserWorkItem((o) =>
{
Thread.Sleep(someNumberOfMilliseconds);
DoDelayedWorkHere();
});
Обновить
Это делает трюк с использованием System.Windows.Формы.Таймер.
var timer = new System.Windows.Forms.Timer();
timer.Interval = someNumberOfMilliseconds;
timer.Tick = (o, args) =>
{
timer.Stop();
DoDelayedWorkHere();
};
timer.Start();
Ответ №1:
QTimer — это синхронный таймер, такой же, как таймер Winforms. Потоковая передача или один из других классов таймеров не является заменой. Одиночный выстрел легко реализовать, просто установите для свойства Enabled таймера значение false в обработчике событий Tick. Нет опасности гонки:
private void timer1_Tick(object sender, EventArgs e) {
((Timer)sender).Enabled = false;
// etc..
}
Ответ №2:
Как насчет System.Многопоточность.Таймер? Используйте один из конструкторов с period
параметром и укажите параметр соответствующим образом.