It's not working because you are moving files on the UI thread - which means it can't update the display until your method ends.
Move your code to actually do the move into a new thread and report progress back to the main thread and it'll work. The easiest way to do that is via a background worker:
private void FrmMain_Shown(object sender, EventArgs e)
{
BackgroundWorker work = new BackgroundWorker();
work.WorkerReportsProgress = true;
work.DoWork += Work_DoWork;
work.ProgressChanged += Work_ProgressChanged;
work.RunWorkerCompleted += Work_RunWorkerCompleted;
work.RunWorkerAsync();
}
private void Work_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
private void Work_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
private void Work_DoWork(object sender, DoWorkEventArgs e)
{
}