Exemplo n.º 1
0
        public Task Run(Action <OverlayWindow, Graphics> drawMethod, CancellationToken cToken)
        {
            return(Task.Run(() =>
            {
                using (System.Timers.Timer t = new System.Timers.Timer()
                {
                    AutoReset = false,
                    Interval = desiredDrawInterval
                })
                {
                    t.Elapsed += (object sender, System.Timers.ElapsedEventArgs e) =>
                    {
                        try
                        {
                            // Ensure this is on top of the game.
                            _window.PlaceAboveWindow(windowHook);

                            // Begin a new scene/frame.
                            _graphics.BeginScene();

                            // Clear the previous scene/frame.
                            _graphics.ClearScene();

                            drawMethod.Invoke(_window, _graphics);

                            // End the scene/frame rendering.
                            _graphics.EndScene();
                        }
                        finally
                        {
                            try { ((System.Timers.Timer)sender).Start(); }
                            catch { }
                        }
                    };
                    t.Start();

                    try { Task.WaitAll(Task.Delay(-1, cToken)); }
                    catch { }
                }
            }, cToken));
        }