您当前的位置: 首页 >  ar

光怪陆离的节日

暂无认证

  • 2浏览

    0关注

    1003博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C#控件 ToolStripProgressBar 用法

光怪陆离的节日 发布时间:2022-07-30 18:13:14 ,浏览量:2

C# ToolStripProgressBar 用法简析 在处理的过程中耗时较长,因此想在窗体底部加一个进度条来指示处理的过程进度,发现有ToolStripProgressBar这么一个神奇的控件,可以方便的用来反映进度情况。但是对于如何使用,初次接触也是比较懵,因此习惯性的去MSDN查找了官方文档。果然官方文档给出了一个详细的例程,此处贴出链接:MSDN: ToolStripProgressBar。 https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.toolstripprogressbar?redirectedfrom=MSDN&view=windowsdesktop-6.0 在这里插入图片描述

使用方法 ProgressBar控件需要配合一个名为BackgroundWorker的Class配合使用。该类是一个可以独立于主线程工作的子线程,只要将需要用进度条指示的动作绑定到这个类中,并根据完成程度实时的对进度条进度值进行改写,即可实现进度条的同步显示。此处要注意的是,为了实时反映工作的进度,需要将BackgroundWorker的WorkerReportsProgress属性改为True。 主要需要对BackgroundWorker绑定以下三个事件:

开始工作的动作:DoWork 完成工作的动作:RunWorkerCompleted 工作中刷新的动作:ProgressChanged 首先来看一下如何绑定事件,这部分可以在视图设计器中进行绑定,也可以在实现的代码中手动绑定,此处示例在代码中手动绑定:

private void InitializeBackgroundWorker() { backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler( backgroundWorker1_RunWorkerCompleted); backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler( backgroundWorker1_ProgressChanged); } 1 2 3 4 5 6 7 8 开始工作DoWork 这里需要将用进度条指示的函数进行绑定,要注意,该函数需要有两个用于BackgroundWorker控制的参数传入,其中worker参数用于还原BackgroundWorker对象,而e参数可以指示动作完成的事件是如何被触发的(用户取消or动作完成)。因此函数定义格式应当如下:

private void DoSomething(BackgroundWorker worker, DoWorkEventArgs e) 1 在这个动作事件中需要进行两件事:第一,还原出worker;第二,调用DoSomething函数开始工作。代码参考如下:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { //还原worker对象 BackgroundWorker worker = sender as BackgroundWorker; //开始工作 DoSomething(worker, e); } 1 2 3 4 5 6 7 结束工作RunWorkerCompleted 这里用于指示工作结束时该如何进行下一步动作。并且可以根据传入的参数e来区分工作是中止或完成,以此来进行不同的“收尾”工作。代码参考如下:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //还原Worker对象 BackgroundWorker worker = sender as BackgroundWorker; //判断是否由错误造成意外中止 if (e.Error != null) { //若发生错误,弹窗显示错误信息 MessageBox.Show(e.Error.Message); } //判断是否用户手动取消,若程序要支持此处功能,需要程序中有cancel的动作,并在该动作中将e.cancel置为true else if (e.Cancelled) { //添加用户手动取消的动作 MessageBox.Show(“Canceled”); } //判断是否正常结束 else { //添加正常结束之后的收尾动作 MessageBox.Show(“Complete”); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 工作中刷新ProgressChanged 针对加进度条这个目标来说,这里只要更新进度条的进度值即可。此处也可以加入用户在过程中需要实时刷新的内容。代码示例如下:

private void backgroundWorker1_ProgressChanged(object sender,ProgressChangedEventArgs e) { //更新进度条进度值 this.toolStripProgressBar1.Value = e.ProgressPercentage; } 1 2 3 4 5 总结 案例下载 https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker?redirectedfrom=MSDN&view=net-6.0 在这里插入图片描述

关注
打赏
1665731445
查看更多评论
立即登录/注册

微信扫码登录

0.0386s