Вопрос по c# – Как показать индикатор выполнения в приложении Windows?

2

Я работаю над приложением Windows, используя C #.

У меня есть форма и класс, имеющий все методы.

У меня есть метод в классе, в котором я обрабатываю некоторые файлы в arraylist. Я хочу вызвать метод индикатора выполнения для этой обработки файла, но он не работает.

Любая помощь

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
        }
    }
}

Ваш Ответ

1   ответ
7

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();

}
Хорошо, я добавил пример.
var не является кодом C # ...
@ SiKni8Implicitly typed local variables были добавлены как часть C # 3.0 и .NET 3.5 в 2007 году.
Спасибо .. Можете поделиться кодом, чтобы показать, как я должен это реализовать? Aquarius24
@HackedByChinese Не хотел показаться грубым :) Просто пытался использовать твой код, вот и все. Спасибо за разъяснения.

Похожие вопросы