Хочу сделать копирование файлов с отображением хода копирования в прогресбаре! Создал форму Copy, кинул на нее два прогресбара progressBar1, progressBar2, и два лейбла Label1, и Label2; Первый пргресбар отображает копирование текущего файла, а второй ход копирования списка файлов! В лейблы записываю пути откуда и куда копирую. Вот написал код, все работает, но есть одна проблема с отображением формы, когда во время копирования я нажму мышкой по форме то она сразу подвисает, но копирование продолжается, просто этого уже не видно потому что форма висит!! Где ошибка в коде??? Может где то обновление вставить надо???
| Код | //запуск потока public void CmdStart(string[] s, string dest) { List = GetListForCommand(s); tSize = GetSize(List); cSize = 0; if (File.Exists(List[0])) { FileInfo f = new FileInfo(List[0]); parent = f.DirectoryName; } if (Directory.Exists(List[0])) { DirectoryInfo d = new DirectoryInfo(List[0]); parent = d.Parent.FullName; } destPatch = dest; cType = Type; Thread t = new Thread(new ThreadStart(FDCopy)); t.Priority = ThreadPriority.Normal; t.Start(); }
private void FDCopy() { fd.Show(); foreach (string d in List) { fp.Refresh(); string dest = d.Replace(parent, destPatch); if (File.Exists(d)) OneFileCopy(d, dest); if (Directory.Exists(d)) Directory.CreateDirectory(dest); } fd.Dispose(); } //копирование одного файла private void OneFileCopy(string sourse, string dest) { try { FileInfo sf = new FileInfo(sourse); FileInfo df = new FileInfo(dest); if (sf == df) return; if (df.Exists) {
string text = "Заменить :" + df.FullName + "\n\t" + df.Length + " byte, " + df.LastWriteTime; text += "\n\n фалом: " + sourse + "?\n\t" + sf.Length + " byte, " + sf.LastWriteTime; DialogResult dRes = MessageBox.Show(text, "File Manager", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (dRes == DialogResult.Yes) File.Delete(df.FullName); else { cSize += sf.Length; fp.progressBar2.Value = Convert.ToInt32(Convert.ToDouble(Convert.ToDouble(cSize) / Convert.ToDouble(tSize)) * 100); return; } } FileStream strSf = new FileStream(sourse, FileMode.Open); FileStream strDf = new FileStream(dest, FileMode.Create); fp.progressBar1.Value = 0; fp.label1.Text = "Из " + sourse; fp.label2.Text = "В " + dest; fp.Refresh(); int k = 0; int nb = 0; byte[] buf = new byte[4096]; //по 4 Кб while ((nb = strSf.Read(buf, 0, 4096)) > 0) { strDf.Write(buf, 0, nb); //fp.Refresh(); fp.progressBar2.Value = Convert.ToInt32(Convert.ToDouble(Convert.ToDouble(cSize) / Convert.ToDouble(tSize)) * 100); fp.progressBar1.Value = Convert.ToInt32(Convert.ToDouble(Convert.ToDouble(k) / Convert.ToDouble(sf.Length)) * 100); cSize += nb; k += nb; } strDf.Dispose(); strSf.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.Message); }
}
|
|