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 に答える