如何从另一个类更新窗口应用程序中的进度条?

时间:2018-05-08 08:29:08

标签: c#

我创建了一个窗体,我有一个进度条,我想从另一个类更新进度条的值。我已经在课堂上编写了一个关于执行的函数,我希望看到进度条的进展情况。

例如:

  1. 以表格.cs文件写的代码:
  2.  namespace UpdateProgressBar
    {
        public partial class ProgressBarUdpate : Form
        {
            public ProgressBarUdpate()
            {
                InitializeComponent();
            }
    
            private void btn_Submit_Click(object sender, EventArgs e)
            {
                UpdateDataProgress updt = new UpdateDataProgress();
                updt.ExecuteFucntion();
            }
        }
    }
    
    1. 用另一个类写的代码
    2. namespace UpdateProgress
      {
          public class UpdateDataProgress
          {
              public void ExecuteFucntion()
              {
                  for (int i = 0; i < 100; i++)
                  {
      
                  }
      
              }
          }
      }
      

      我的预期输出是当我调用updt.ExecuteFucntion函数时,它应该根据在另一个类中实现的循环更新进度条值。

2 个答案:

答案 0 :(得分:1)

您应该在此要求中使用Event

<强>逻辑:

由于您的基本要求是根据方法的执行状态(在类库中)更新ProgressbarUI

您需要在执行ExecuteFucntion()时引发事件。此活动将以ProgressBarUdpate格式处理。

正如您在下面的代码中所看到的,在创建UpdateDataProgress的对象后,我们按updt.ExecutionDone += updt_ExecutionDone;订阅了它的事件

因此,只要该事件从ExecuteFucntion()提出,它就会调用updt_ExecutionDone ProgressBarUdpate,您可以在其中更新您的进度条。

更新您的代码,如下所示。

    public partial class ProgressBarUdpate : Form
    {
        public ProgressBarUdpate()
        {
            InitializeComponent();
        }

        private void btn_Submit_Click(object sender, EventArgs e)
        {
            UpdateDataProgress updt = new UpdateDataProgress();
            updt.ExecutionDone += updt_ExecutionDone;
            updt.ExecuteFucntion();
        }

        void updt_ExecutionDone(int value)
        {
            //Update your progress bar here as per value
        }
    }

和班级UpdateProgress

    public delegate void ExceutionHandler(int value);
    public class UpdateDataProgress
    {
        public event ExceutionHandler ExecutionDone;
        public void ExecuteFucntion()
        {
            for (int i = 0; i < 100; i++)
            {
                //perform your logic

                //raise an event which will have current i 
                //      to indicate current state of execution
                //      use this event to update progress bar 

                if (ExecutionDone != null)
                    ExecutionDone(i);
            }

        }
    }

答案 1 :(得分:0)

您可以使用事件,或只是:

  1. 表格中的代码:

    private void btn_Submit_Click(object sender, EventArgs e)
    {
        UpdateProgress.UpdateDataProgress updt = new UpdateProgress.UpdateDataProgress();
        updt.ExecuteFucntion(progressBar1);
    }
    
  2. 课堂代码:

    public class UpdateDataProgress
    {
        public void ExecuteFucntion(System.Windows.Forms.ProgressBar progbar)
        {
            for (int i = 0; i < 100; i++)
            {
                progbar.Value = i;
            }
        }
    }