Example #1
0
        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;
            }
        }