public void process(ulong total, bool proverka) { /*nabor.progress.Refresh(); * nabor.progress.CreateGraphics().DrawString("asfdsdgsdg", * new Font("Arial", (float)8.25, FontStyle.Regular), * Brushes.Black, new PointF(nabor.progress.Width / 2 - 10, * nabor.progress.Height / 2 - 7));*/ this.proverka = proverka; this.total = total; bool proveril = false; try { if ((ulong)drive.TotalSize < total) { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text = s), "Недостаточно места на флешке. "); } else { nabor.status.Text = "Недостаточно места на флешке. "; } proveril = true; fail(this); return; } } catch { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text = s), "Не удалось определить объём флешки. "); } else { nabor.status.Text = "Не удалось определить объём флешки. "; } } try { Process prc = new Process(); //prc.Exited += Prc_Exited; ; new Thread(() => { try { if (Directory.GetFiles(drive.RootDirectory.FullName).Length == 0 & Directory.GetDirectories(drive.RootDirectory.FullName).Length == 0) { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text = s), "Переименование. "); } else { nabor.status.Text = "Переименование. "; } if (!DriveManager.RenameDrive(prc, drive.Name[0], labelt)) { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text = s), "Ошибка при попытке форматировать. "); } else { nabor.status.Text = "Ошибка при попытке форматировать. "; } throw new Exception(); } } else { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text = s), "Форматирование. "); } else { nabor.status.Text = "Форматирование. "; } if (!DriveManager.FormatDrive(prc, drive.Name[0], labelt, "FAT32")) { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text = s), "Ошибка при попытке форматировать. "); } else { nabor.status.Text = "Ошибка при попытке форматировать. "; } throw new Exception(); } } /*} * catch (Exception e) * { * if (nabor.status.InvokeRequired) nabor.status.Invoke(new Action<string>((s) => nabor.status.Text = "Ошибка при попытке форматировать. " + s), e.Message); * else nabor.status.Text = "Ошибка при попытке форматировать. " + e.Message; * fail(this); * Thread.CurrentThread.Abort(); * return; * } * try { */ if ((ulong)drive.AvailableFreeSpace < total && proveril == false) { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text = s), "Недостаточно места на флешке. "); } else { nabor.status.Text = "Недостаточно места на флешке. "; } proveril = true; fail(this); Thread.CurrentThread.Abort(); return; } } catch (Exception e) { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text = "Не читается. " + s), e.Message); } else { nabor.status.Text = "Не читается. " + e.Message; } fail(this); Thread.CurrentThread.Abort(); return; } //fail(this); try { Prc_Exited(); } catch (Exception e) { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text = "Ошибка при попытке копирования. " + s), e.Message); } else { nabor.status.Text = "Ошибка при попытке копирования. " + e.Message; } fail(this); Thread.CurrentThread.Abort(); return; } }).Start(); // Выполнить в новом потоке } catch (Exception e) { if (nabor.status.InvokeRequired) { nabor.status.Invoke(new Action <string>((s) => nabor.status.Text += s), e.Message); } else { nabor.status.Text += e.Message; } fail(this); Thread.CurrentThread.Abort(); return; } }