Enhance MVC implementation
public interface IView
{
    Controller Controller { set; }    
}


NO!!
You have just coupled the View with the Controller, which defeats the entire purpose.
This is also broken:

public abstract class Controller
{
    protected readonly IModel model;

    protected readonly IView view;

    protected Controller(IModel model, IView view)
    {


Now you have a circular dependency, with the controller knowing about the view, and the view knowing about the controller - but the controller knowing about the view and model is fine:


I don't understand this line:

Thread.Sleep(5000);


Why sleep for five whole seconds?

I'll just add that the naming convention, as noted by BCdotNET, is off: ControllerPerson should be PersonController - not because that's how ASP.NET MVC has it, but because C# and the .NET framework in general does it that way; it's just a matter of consistency... and it's what someone maintaining your code would expect to see.