Exemple #1
0
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            string  devid          = (string)e.Argument;
            string  devnum         = new String(devid.Where(Char.IsDigit).ToArray());
            RawDisk disk           = new RawDisk(DiskNumberType.PhysicalDisk, Convert.ToInt32(devnum), FileAccess.Read);
            long    diskReadLength = disk.SizeBytes;
            long    totalRead      = 0;
            int     increment      = (int)(((16f * 1024f * 1024f) / disk.SectorSize) * disk.SectorSize);

            byte[]    input = new byte[increment];
            Stopwatch sw    = new Stopwatch();

            FileStream fs = new FileStream(textBox1.Text, FileMode.Create);

            using (RawDiskStream diskFs = disk.CreateDiskStream())
            {
                sw.Start();
                while (true)
                {
                    if (backgroundWorker1.CancellationPending)
                    {
                        e.Cancel = true;
                        diskFs.Close();
                        fs.Close();
                        break;
                    }
                    int read       = (int)Math.Min(increment, disk.SizeBytes - totalRead);
                    int actualRead = diskFs.Read(input, 0, read);

                    if (actualRead == 0)
                    {
                        diskFs.Close();
                        fs.Close();

                        if (totalRead == diskReadLength)
                        {
                            readCompleteOK = true;
                        }
                        else
                        {
                            readCompleteOK = false;
                        }

                        break;
                    }

                    totalRead += actualRead;
                    fs.Write(input, 0, input.Length);
                    imageState imst = new imageState();
                    imst.progress = fsToHuman(Convert.ToUInt64(totalRead)) + " / " + fsToHuman(Convert.ToUInt64(diskReadLength));
                    int perc = (int)(0.5f + ((100f * totalRead) / disk.SizeBytes));
                    //imst.disksize = disk.SizeBytes;
                    //imst.diskposition = totalRead;
                    imst.percent = perc.ToString() + "% complete";
                    imst.speed   = Math.Round(((diskFs.Position / 1048576f) / sw.Elapsed.TotalSeconds), 2).ToString() + "MB/s";
                    backgroundWorker1.ReportProgress(perc, imst);
                }
            }
        }
Exemple #2
0
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            imageState imst = (imageState)e.UserState;

            label2.Text = imst.progress;
            //label5.Text = ((int)Math.Round((double)(100 * imst.diskposition) / imst.disksize)).ToString() + "% completed";
            //progressBar1.Maximum = Convert.ToInt32(imst.disksize);
            //progressBar1.Value = Convert.ToInt32(imst.diskposition);
            label5.Text        = imst.percent;
            progressBar1.Value = e.ProgressPercentage;
            label6.Text        = imst.speed;
        }