从其他类的方法显示ProgressBar

时间:2016-03-09 15:11:47

标签: c# winforms progress-bar

我有一个课程,我的所有方法都已实施,完成工作等。 然后我有我的Form1 - 我有一个FileSystemWatcher组件和一些按钮\复选框实例。

我一直在阅读有关BackgroundWorker,ProgressBar的内容,但我无法确定应该实施哪些内容以显示进度。

由于.cs文件(我的类)中的“一切都发生了”,有没有办法显示其输出? FileSystemWatcher如何与它进行交互(一切都在我调用watch方法之后发生 - 之前没有做任何事情)。

例如: 在我的课上,我有一个读取文件的功能,然后是另一个将这些文件转换为XML的功能。我想显示每个被readed文件的进度,然后转换每个文件。当我有一个控制台应用程序(找到一个完成它的工作的方法)时我完成了它但我无法理解如何在WinForm应用程序上实现它。

如果所有内容都在Form1.cs代码中,那么确保它会更容易。我试图制作一个“样本”,因为我原来的代码太大了。

代码示例:

public class Foo
{
//foo vars and methods...
}

然后,表单方法

 public partial class Form1 : Form
    {
        private Foo prg;


        public Form1()
        {
            InitializeComponent();

            prg = new Foo();

            prg.LoadConfig();
            FillTextBox();

    }
       private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
//Do some checkbox verifications.... 
//after verification is done calls the Watcher (ProgramProcessing)
prg.ProgramProcessing(textBox1.Text);
}

我想要的是显示基于此观察者的进度条。一切都在他被触发后发生。

编辑:带有进度条的BackGroundWorker示例代码我一直在尝试使用:

   private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {



        // do some long-winded process here
        // this is executed in a separate thread
        int maxOps = 1000000;
        for (int i = 0; i < maxOps; i++)
        {
            rtbText.AppendText(i.ToString() + "\r\n");
            // report progress as a percentage complete
            bgWorker.ReportProgress(100 * i / maxOps);
        }
    }
    private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        // update the progress bar
        pbProgress.Value = e.ProgressPercentage;
    }
    private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        // return to "normal" mode of operation
        this.Cursor = Cursors.Default;
        //btnGo.Enabled = true;
    }

1 个答案:

答案 0 :(得分:1)

如果要使用最新的.NET库,可以使用IProgress接口,基本上只需调用IProgress.Report()。此接口将为您节省代码行,以使用BackgroundWorker实现必要的事件处理程序。

https://msdn.microsoft.com/en-us/library/hh138298(v=vs.110).aspx