c# – 进度条工作但标签未更新

c# – 进度条工作但标签未更新,第1张

概述我有一个带接口的库. Public Interface Progress{ int ProgressValue{get;set;}, string ProgressText{get;set;},} 库有一个方法Create(虚拟代码): Public Class TestLibrary{ Progress _progress; Public void Cr 我有一个带接口的库.

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# – 进度条工作但标签未更新所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1223512.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存