C# Backgroundworker.报告进度问题

C# Backgroundworker.报告进度问题,c#,backgroundworker,C#,Backgroundworker,我和我的同事有一些问题。我试图实现的是,我的bgworker报告将zip文件解压缩到文本框中的进度。 这就是我想展示它的方式: 5% 10% 15% 20% 25% 等等 这就是我目前得到的: int percentage; percentage = count*100/array.Length; worker.ReportProgress(percentage); 我的文本框名称是ContentTextBox 以下是可能有用的其余代码: private void UnpackBack

我和我的同事有一些问题。我试图实现的是,我的bgworker报告将zip文件解压缩到文本框中的进度。 这就是我想展示它的方式:
5%
10%
15%
20%
25%
等等

这就是我目前得到的:

int percentage;
percentage = count*100/array.Length;
worker.ReportProgress(percentage);
我的文本框名称是
ContentTextBox

以下是可能有用的其余代码:

    private void UnpackBackgroundWorkerCompletedEvent(object sender, RunWorkerCompletedEventArgs e)
            {
                FileTextBox.Text = databaseName;
                ContentPanel.Visible = true;
                Text = "Check Database";

            }

            public void UnpackWorker(object sender, DoWorkEventArgs doWorkEventArgs)
            {
                if (FileTextBox.Text == "")
                {
                    MessageBox.Show("File textbox is empty");
                    return;
                }

                String fileName = FileTextBox.Text;
                if (!File.Exists(fileName))
                {
                    MessageBox.Show("File doesn't exist");
                    return;
                }

                Logger logger = new Logger(Path.ChangeExtension(FileTextBox.Text, ".log"), this, ContentTextBox);

                String status = "******** Unpacking zipfile '" + fileName + "' ";
                logger.Write("");
                logger.Write("********");
                logger.Write(status);
                logger.Write("********");

                string databaseFileName = Path.ChangeExtension(fileName, ".db");
                DatabaseUtils.RestoreDatabase(fileName, databaseFileName);
                logger.Write("Zipfile '" + fileName + "' unpacked to '" + databaseFileName + "'.");

                databaseName = databaseFileName;




            }

public void Run()
        {
            var unpackWorker = new BackgroundWorker();

            if (FileTextBox.Text.EndsWith(".zip"))
            {
                unpackWorker.DoWork += UnpackWorker;
                unpackWorker.RunWorkerAsync();
                unpackWorker.RunWorkerCompleted += UnpackBackgroundWorkerCompletedEvent;
            }
            else
            { MessageBox.Show("No zip selected")
            }

        }
编辑 要写入文本框,我必须使用logger.write() 因为我制作了一个zip解包输出的日志文件


提前感谢您的帮助/建议

您应该处理
BackgroundWorker.ProgressChanged
事件,并在其中更新您的文本框。另外,您可能应该在调用
RunWorkerAsync()
之前添加
RunWorkerCompleted
事件处理程序,以避免潜在的争用情况

unpackWorker.DoWork += UnpackWorker;
unpackWorker.RunWorkerCompleted += UnpackBackgroundWorkerCompletedEvent;
unpackWorker.ProgressChanged += SomeMethodThatUpdatesYourTextBox
unpackWorker.RunWorkerAsync();

你说你有问题,但你没有指定这些问题是什么。我试图做的是在我的文本框中显示百分比。
DatabaseUtils.RestoreDatabase(fileName,databaseFileName)以报告进度。我最近看到了相同的问题,找不到它。要显示百分比,您需要有您正在使用的
Zip
库的
Progress
事件。在这种情况下,您可以估计完成了多少工作并显示它。否则,您可以简单地说“解压缩0%”,然后在完成时说“解压缩100%”。