Your form hanging, because UI stuff (like updating form content, responding to events, moving window, etc) is executed in main thread (so-called STA thread).
In order to not hang UI while executing some operation, you should create another thread for your long-running operation. There are a lot of ways to do it, but the simplest will be to use TPL's Task.Run:
void Click(object sender, EventArgs args)
{
Task.Run(CopyFile);
}
void CopyFile()
{
File.Copy(this.src, this.target);
// note that since we're in different thread, we cannot interact with UI,
// so you have to dispatch your operations to UI thread. That can be done just using
// Control's Invoke method
this.Invoke(NotifySuccess);
}
As for displaying progress, it's will be a bit more complicated. Since File.Copy() doesn't support progress reporting, you have to use FileStreams. You can check example for it here: https://stackoverflow.com/a/6055385/2223729