public async Task Run(string[] args) { var runtimeParams = new RuntimeParams(); CreatTrayIcon(runtimeParams); RegisterShortcut(runtimeParams); Config config = ParseConfig(args); await CaptureJob(config, runtimeParams); }
private void CreatTrayIcon(RuntimeParams runtimeParams) { new Thread( () => { var trayMenu = new ContextMenu(); trayMenu.MenuItems.Add("Start", (_, __) => runtimeParams.Pause = false); trayMenu.MenuItems.Add("Pause", (_, __) => runtimeParams.Pause = true); trayMenu.MenuItems.Add("-"); trayMenu.MenuItems.Add("Close", (_, __) => runtimeParams.Stop()); var trayIcon = new NotifyIcon { Icon = Utils.PlayIcon, ContextMenu = trayMenu, Visible = true }; runtimeParams.TogglePause += (pause) => trayIcon.Icon = pause ? Utils.PauseIcon : Utils.PlayIcon; Application.Run(); }) { IsBackground = true }.Start(); }
private async Task CaptureJob(Config config, RuntimeParams runtimeParams) { try { var random = new Random(DateTime.Now.Millisecond); Capture(config); while (!runtimeParams.Stopped) { var wait = random.Next(config.From, config.To) * 1000; await Task.Delay(wait, runtimeParams.CancellationTokenSource.Token); if (!runtimeParams.Pause) { Capture(config); } } } catch (OperationCanceledException) { Console.WriteLine("Stopping."); } }
private void RegisterShortcut(RuntimeParams runtimeParams) => new KeyListener().onPress(PAUSE_SHORTCUT, () => runtimeParams.Pause = !runtimeParams.Pause);