internal static void SetTimeout(double delay, Action callback)
        {
            Timer timer = new Timer(delay)
            {
                AutoReset = false
            };

            void TimerElapsed(object sender, ElapsedEventArgs e)
            {
                timer.Stop();
                timer.Elapsed -= TimerElapsed;

                callback.BeginOnUIThread();
            }

            timer.Elapsed += TimerElapsed;

            timer.Start();
        }