
Public Interface Progress{ int ProgressValue{get;set;},string Progresstext{get;set;},} 库有一个方法Create(虚拟代码):
Public Class Testlibrary{ Progress _progress; Public voID Create() { foreach(var n in TestList) { // Do Something _progress.ProgressValue = GetIndex(n); _progress.Progresstext = "Updating..." + n; } }} 我有一个引用此库并调用Create方法的项目.它甚至实现了接口进度.
Public Class TestProject : Progress{ public int ProgressValue { get{return progressbar1.Value;} set{progressbar1.Value = value;} } public int Progresstext { get{return label1.Text;} set{label1.Text = value;} }} 现在,当我运行应用程序时,Progress bar表现正常并正确显示进度,但label1的Text文本根本没有变化.但它在for循环结束时会发生变化并显示循环中的最后一项.任何人都可以帮助我吗?
注意:所有这些代码都是直接编写的,没有经过测试,因为我现在没有我的应用程序.对不起任何语法错误.
解决方法 使用Label而不是Progressbar.你可以试试这个代码[使用BackGrounDWorker] –using System.ComponentModel;using System.windows.Forms;namespace windowsFormsApplication1{ public partial class Form3 : Form { private BackgrounDWorker _worker; BusinessClass _biz = new BusinessClass(); public Form3() { InitializeComponent(); InitWorker(); } private voID InitWorker() { if (_worker != null) { _worker.dispose(); } _worker = new BackgrounDWorker { WorkerReportsProgress = true,WorkerSupportsCancellation = true }; _worker.DoWork += DoWork; _worker.RunWorkerCompleted += RunWorkerCompleted; _worker.ProgressChanged += ProgressChanged; _worker.RunWorkerAsync(); } voID DoWork(object sender,DoWorkEventArgs e) { int highestPercentageReached = 0; if (_worker.CancellationPending) { e.Cancel = true; } else { double i = 0.0d; int junk = 0; for (i = 0; i <= 199990000; i++) { int result = _biz.MyFunction(junk); junk++; // Report progress as a percentage of the total task. var percentComplete = (int)(i / 199990000 * 100); if (percentComplete > highestPercentageReached) { highestPercentageReached = percentComplete; // note I can pass the business class result also and display the same in the LABEL _worker.ReportProgress(percentComplete,result); _worker.CancelAsync(); } } } } voID RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e) { if (e.Cancelled) { // display some message to the user that task has been // cancelled } else if (e.Error != null) { // Do something with the error } } voID ProgressChanged(object sender,ProgressChangedEventArgs e) { label1.Text = string.Format("Result {0}: Percent {1}",e.UserState,e.Progresspercentage); } } public class BusinessClass { public int MyFunction(int input) { return input+10; } }} 几天前发布的相同here
总结以上是内存溢出为你收集整理的c# – 进度条工作但标签未更新全部内容,希望文章能够帮你解决c# – 进度条工作但标签未更新所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)