var serviceController = new ServiceController();
serviceController.ServiceStateChange += ServiceController_ServiceStateChanged;
serviceController.StartServices();
private void ServiceController_ServiceStateChanged(object sender, ServiceControllerEventArgs e)
Console.WriteLine(e.Message);
public class ServiceController
public event EventHandler<ServiceControllerEventArgs> ServiceStateChange;
public void StartServices()
Service[] services = new Service[]
new Service { Name = "MSMQ", Status = "Stopped" },
new Service { Name = "W3SVC", Status = "Running" }
foreach(Service s in services)
if(s.Status == "Stopped")
if(s.Status == "Running") {
message = string.Format("Service {0} is {1}", s.Name, s.Status);
else if(s.Status == "Running") {
message = string.Format("Service {0} is already {1}", s.Name, s.Status);
OnServiceStateChange(message);
private void OnServiceStateChange(string message)
var serviceStateChangeHandler = ServiceStateChange;
if(serviceStateChangeHandler != null)
serviceStateChangeHandler(this, new ServiceControllerEventArgs { Message = message });
public class ServiceControllerEventArgs : EventArgs
public string Message { get; set; }
public string Name { get; set; }
public string Status { get; set; }