0

从大约 90% 开始,我看不到运行 91、92、93 的数字......酒吧刚刚走到尽头,然后是 100%

这是触发该操作的菜单单击事件:

private void beginConvertionToolStripMenuItem_Click(object sender, EventArgs e)
        {
                automatic_ = true;
                button4.Enabled = true;
                beginConvertionToolStripMenuItem.Enabled = false;
                backgroundWorker1.RunWorkerAsync();
        }

然后是 DoWork 事件:

private void backgroundWorker1_DoWork_1(object sender, DoWorkEventArgs e)
        {
            if (automatic_ == true)
            {
                int y;
                string[] newDest_files;
                System.Drawing.Image NewImages;
                string sf;
                string[] images;
                sf = @"C:\Fraps\Screenshots\";
                images = Directory.GetFiles(sf, "*.bmp");
                for (int x = 0; x < images.Length; x++)
                {
                    int procents = ((x + 1) * 100) / images.Length;
                    backgroundWorker1.ReportProgress(procents, images[x]);
                    if (cancel_ == true)
                    {
                        e.Cancel = true;
                        break;
                    }

                        NewImages = System.Drawing.Image.FromFile(images[x]);
                        batch_Resize(NewImages);
                        if (NewImages != null)
                        NewImages.Dispose();
                }
            }
            e.Result = "All files converted successfully";
        }

batch_Resize 函数代码:

private void batch_Resize(Image sourceImage)
        {
            Bitmap newImage = new Bitmap(512, 512);
            using (Graphics gr = Graphics.FromImage(newImage))
            {
                gr.SmoothingMode = SmoothingMode.AntiAlias;
                gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
                gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
                gr.DrawImage(sourceImage, new Rectangle(0, 0, newImage.Width, newImage.Height));
                i = i + 1;
                newImage.Save(@"d:\NewImages\" + i.ToString("D6") + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            }

            if (newImage != null)
                newImage.Dispose();
        }

和进度改变事件:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;


            listBox1.Items.Add( "Converting File: " + e.UserState.ToString());
            textBox1.Text = e.ProgressPercentage.ToString();
            label4.Text = e.ProgressPercentage.ToString() + "%";

        }

和完成的事件:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
               MessageBox.Show(e.Error.Message);
            }
            else if (e.Cancelled)
            {
                listBox1.Items.Add("Convertion Have been canceled");
                button4.Enabled = false;
            }
            if (cancel_ == true)
            {
            }
            else
            {
                button4.Enabled = false;
            }
        }

似乎从 90% 开始,进度条继续呈绿色,但最终它的 100% 并且它没有从 90 到 100。

4

1 回答 1

0

它可能发生得太快了。尝试添加等待时间(用于测试目的),以便您检查它是否正确显示。

不确定如何在 C# 上执行此操作,但在 Java 上它将是 Thread.sleep()

于 2012-08-20T21:20:47.087 回答