Add IAction interface
Rewrite to avoid using BackgroundWorker