private void TglRouting_CheckedChanged(object sender, EventArgs e) { var invokeGenerator = new Func <bool, MethodInvoker>(status => (MethodInvoker) delegate { tglRouting.Enabled = status; spinnerRouting.Visible = !status; }); if (tglRouting.Checked && Globals.RoutingService.Status != ServiceControllerStatus.Running) { Task.Run(() => { Invoke(invokeGenerator(false)); ServiceUtilities.ChangeStartMode(Globals.RoutingService, ServiceStartMode.Manual); Globals.RoutingService.Start(); while (Globals.RoutingService.Status != ServiceControllerStatus.Running) { Thread.Sleep(250); Globals.RoutingService.Refresh(); } Invoke(invokeGenerator(true)); }); } else if (!tglRouting.Checked && Globals.RoutingService.Status == ServiceControllerStatus.Running) { Task.Run(() => { Invoke(invokeGenerator(false)); Globals.RoutingService.Stop(); ServiceUtilities.ChangeStartMode(Globals.RoutingService, ServiceStartMode.Manual); while (Globals.RoutingService.Status != ServiceControllerStatus.Stopped) { Thread.Sleep(250); Globals.RoutingService.Refresh(); } Invoke(invokeGenerator(true)); }); } }