如何在每个循环周期中一步更新进度条? C#
发布时间:2020-12-16 01:38:06 所属栏目:百科 来源:网络整理
导读:在C#,windows窗体中创建.net应用程序.如何在100循环循环的每个循环中更新进度条1步? (我正在处理循环中的excel表.) 进度条控件位于UI类中,该类连接到连接到自定义类的控制器类 (MVC模式).循环在自定义类中. 我是否需要在每种方法中一直向下发送UI类实例,还
在C#,windows窗体中创建.net应用程序.如何在100循环循环的每个循环中更新进度条1步?
(我正在处理循环中的excel表.) 进度条控件位于UI类中,该类连接到连接到自定义类的控制器类 (MVC模式).循环在自定义类中. 我是否需要在每种方法中一直向下发送UI类实例,还是有更好的方法? 现在,循环结束后进度条会更新. Application.doevents和.update或.refresh不起作用. 解决方法
说下面是你的类负责在其中进行循环的工作.添加事件以指示您的进度.然后从您的UI中简单地处理该事件并相应地更新进度条.
sealed class Looper { public event EventHandler ProgressUpdated; private int _progress; public int Progress { get { return _progress; } private set { _progress = value; OnProgressUpdated(); } } public void DoLoop() { _progress = 0; for (int i = 0; i < 100; ++i) { Thread.Sleep(100); Progress = i; } } private void OnProgressUpdated() { EventHandler handler = ProgressUpdated; if (handler != null) { handler(this,EventArgs.Empty); } } } 您可以通过将BackgroundWorker作为UI的一部分来实现此目的,在backgroundWorker.DoWork事件中调用looper.DoLoop().然后在looper.ProgressUpdated事件的处理程序中,您可以调用backgroundWorker.ReportProgress来增加UI线程的进度条. 请注意,将进度本身包含在ProgressUpdated事件所携带的信息中可能更有意义(我只是想写出一个派生自EventArgs的新类来说明这一点;无论如何你可能得到了图片). 另请注意,除非您在UI线程的单独线程上使用循环执行代码,否则上述操作确实没有意义.否则,您的所有工作都会在下一次UI刷新之前完成,因此您的进度条将不会提供任何值(当循环完成时,它将从0到100). 这是一个如何实现这种事情的例子. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |