如何在Windows应用程序中显示进度条

本文关键字:显示 应用程序 Windows | 更新日期: 2023-09-27 18:34:37

我正在使用c#开发Windows应用程序。

我有一个表单和一个具有所有方法的类。

我在类中有一个方法,我正在处理数组列表中的一些文件。我想为此文件处理调用进度条方法,但它不起作用。

任何帮助

PFB 我的代码片段:

public void TraverseSource()
{
    string[] allFiles1 = Directory.GetFiles(sourcePath, "*.xml", SearchOption.AllDirectories);
    var allFiles = new ArrayList();
    var length = allFiles.Count;
    foreach (string item in allFiles1)
    {
        if (!item.Substring(item.Length - 6).Equals("MD.xml"))
        {
            allFiles.Add(item);
            // Here i want to invoke progress bar which is in form
        }
    }
}

如何在Windows应用程序中显示进度条

您需要

使用 BackgroundWorker 组件,其中DoWork处理程序包含您的实际工作(string[] allFiles1部分及其他(。 它看起来像这样:

public void TraverseSource()
{
    // create the BackgroundWorker
    var worker = new BackgroundWorker
                       {
                          WorkerReportsProgress = true
                       };
    // assign a delegate to the DoWork event, which is raised when `RunWorkerAsync` is called. this is where your actual work should be done
    worker.DoWork += (sender, args) => {
       string[] allFiles1 = Directory.GetFiles(sourcePath, "*.xml", SearchOption.AllDirectories);
        var allFiles = new ArrayList();
        foreach (var i = 0; i < allFiles1.Length; i++)
        {
            if (!item.Substring(item.Length - 6).Equals("MD.xml"))
            {
                allFiles.Add(item);
                // notifies the worker that progress has changed
                worker.ReportProgress(i/allFiles.Length*100);
            }
        }
    };
    // assign a delegate that is raised when `ReportProgress` is called. this delegate is invoked on the original thread, so you can safely update a WinForms control
    worker.ProgressChanged += (sender, args) => {
       progressBar1.Value = args.ProgressPercentage;
    };
    // OK, now actually start doing work
    worker.RunWorkerAsync();
}