【问题标题】:show loading or progress bar in c# winforms在 c# winforms 中显示加载或进度条
【发布时间】:2012-11-27 07:18:27
【问题描述】:

我有 windows 应用程序,我需要在其中将数据保存到数据库中,保存数据后加载水晶报告以显示报告,所有这一切都发生在单击保存按钮时。

我有一个名为 btn_Submit 的按钮单击此数据被保存并显示报告,同时保存它需要时间,所以我想同时显示进度条,以便用户了解该数据正在处理中。我该如何处理这个 Windows 应用程序。

我浏览了这个链接http://www.codeproject.com/Tips/83317/BackgroundWorker-and-ProgressBar-demo,但没有得到我想要的。

我知道后台工作人员,但从未使用过。

我已经使用了上面链接中给出的后台工作程序和进度条,但进度条一旦启动就不会停止。

任何人都可以帮助我吗?你能给出任何演示场景的示例或链接吗?

我在 Dowork() 上添加的这段代码;

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
   PrintData arg = (PrintData)e.Argument;
   SalesMaster sm = arg.SalesData;
   BrokerMaster bm = arg.Broker;
   CustomerMaster ctm = arg.Customer;
   CompanyMaster cm = arg.Company;
   ArrayList hb = arg.Arrardata;
   int totunit = arg.totunit;
   decimal globalamt = arg.golbamt;
   SalesReport sreport = new SalesReport(sm, ctm, cm, bm, hb, totunit, glb_totalamt);


   sreport .MdiParent = arg.parentf;


   sreport .WindowState = FormWindowState.Maximized;
   sreport .Show();
}

我在这一行得到错误 sreport .MdiParent = arg.parentf;

这个错误:

Cross-thread operation not valid: Control 'frmParent' accessed from a thread other than the thread it was created on.

这里应该做什么?

【问题讨论】:

  • 您是否将报告保存为一个大的保存操作(进度条仅显示后台发生的事情),或者您有几个保存步骤应该由进度条反映(进度条显示实际操作百分比完成)?
  • 不,它不需要显示完成了多少的百分比,只是想显示加载或请在后台工作完成时等待标记类型

标签: c# winforms progress-bar backgroundworker


【解决方案1】:

订阅DoWorkRunWorkerCompleted事件和

void btn_Submit_Click(object sender, EventArgs e)
{
    btn_Submit.Enabled = false; // disable button while saving report        
    lbl_Status.Text = "Please wait..";        
    backgroundWorker.RunWorkerAsync(); 
}

void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    // save report here
}

void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    btn_Submit.Enabled = true; // enable button
    lbl_Status.Text = "Report saved";
}

您可以使用微调器等待图像显示PictureBox,而不是使用标签。我不喜欢看到进度条,它不显示任务的百分比 - 我希望当进度条被填满时,任务就会完成。如果您真的想使用进度条,那么,我会使用计时器组件(将计时器的间隔设置为所需的刷新率):

void btn_Submit_Click(object sender, EventArgs e)
{
    btn_Submit.Enabled = false; // disable button while saving report       
    timer.Start();
    progressBar.Visible = true;
    //  backgroundWorker.RunWorkerAsync(new object[] { "Foo", 42 });  
    //  backgroundWorker.RunWorkerAsync(new CustomType("Foo", 42));   
    backgroundWorker.RunWorkerAsync(new { Foo = "Foo", Bar = 42 }););      
}

void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    // object[] args = (object[])e.Argument;
    // CustomType arg = (CustomType)e.Argument;
    dynamic arg = (dynamic)e.Argument;
    string foo = arg.Foo;
    int bar = arg.Bar;
    // save report here
}

void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    btn_Submit.Enabled = true; // enable button
    timer.Stop();
    progressBar.Visible = false;   
}

void timer_Tick(object sender, EventArgs e)
{
    if (progressBar.Value == progressBar.Maximum)
    {
        progressBar.Value = progressBar.Minimum;
        return;
    }

    progressBar.PerformStep();
}

【讨论】:

  • 嗨,在 backgroundWorker_DoWork() 中,我如何传递多个参数以及 backgroundWorker 从你得到这个的地方我应该从工具箱中拖放吗?
  • @user1850707 是的,backgroundWorker 和 timer 都可以从工具箱中获得,请参阅组件组。您可以将复杂对象或数组传递给RunWorkerAsync
  • 谢谢,如何将多个参数传递给 backgroundWorker_DoWork() 或 backgroundWorker.RunWorkerAsync()?????
  • @sharad e.Argument of DoWork 处理程序将包含该对象。我已经通过多个参数传递更新了最后一个示例。
  • @user1850707 .net 中不允许跨线程 UI 操作。您不能设置MdiParent,因为它是在其他线程上创建的。整个方法也不好 - 你应该在你的主线程上有SalesReport 表单,并且只将报告保存委托给后台工作人员。
【解决方案2】:

尝试将 ProgressBar 的 Value 属性重置为 0,如下面的代码所示:

Worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Worker_RunWorkerCompleted);

实现的事件处理程序:

void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    progressBar1.Value = 0;
}

【讨论】:

    【解决方案3】:

    要停止或隐藏进度条,请使用后台工作人员的已完成事件。

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多