Olá kamaliao,
A solução para o problema do bloqueio é fazeres o processo de cópia numa thread diferente da thread do UI.
Podes, e deves usar BackgroundWorkers para facilitar o processo.
Para resolveres o problema da contagem, como o Muryllo diz (e bem) não vais conseguir resolver com atalhos como o "CopyDirectory".
Terás de iterar todos as pastas recursivamente para contabilizares os ficheiros e o tamanho (caso queiras mostrar essa informação) de cada ficheiro (podes usar o FileInfo para essa informação).
Ao fazer esta contabilização, crias uma lista de ficheiros para a cópia e iteras essa lista no final da contabilização, para não gastares de novo o tempo na recursão.
O racional mais simples é algo como: se existirem pastas dentro desta pasta, entra nelas primeiro e repete até não existirem pastas. Quando aí chegar, itera os ficheiros.
Ficas com uma listagem "top-down" do ponto de vista da árvore de ficheiros.
O Windows processa a coisa de forma semelhante: primeiro calcula o trabalho, depois despacha-o.
Poderias ainda fazer contabilização byte a byte, mas penso que não interessa neste caso. Portanto a tua progressbar teria como máximo o número de itens que foram contabilizados. Ao iterares a lista final, vais aumentar o valor da progressbar em 1.
Com este método terás também de resolver a criação da cadeia de pastas no destino, mas isso torna a coisa mais interessante
↧