Inversion of Control (IoC) is also known as the Hollywood Principle: Don't call us, we'll call you. There are many different ways of implementing inversion of control: callbacks, methods, constructor arguments, and so on. The key to understanding Inversion of Control is don't call us, we'll call you inverting the call us with call you where the inversion comes from the fact that code doesn't call into other code, but other code calls into it.
There are many cases where Inversion of Control is necessary in order to implement the required functionality. In the example of callbacks, external code is calling back into your code to pass information or to request functionality. This is often done outside of your process flow (and isn't within your control and hence the inversion). For example:
private void InitailizeTimer() { Timer timer = new Timer(OnTimerTick, null, 6000, // start in 6 seconds 1000); // tick every 1 second afterward } private void OnTimerTick(object stateInfo...