多线程进度条显示

       //进度条所需变量

        private int IsSucess = -1;//判断数据库操作是否成功

        public delegate int ProcessDataDelegate(string buildID);

        public BuildEnergyEx()
        {
            InitializeComponent();
            this.gvList.AutoGenerateColumns = false;
            this.gvList.AllowUserToAddRows = false;
            BindData(currentPage);
        }


        /// <summary>
        /// 响应删除,忽略按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void gvList_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (this.gvList.Columns[e.ColumnIndex].Name == "btnDel")

            {

             //开启多线程调用进度条

                IsSucess = -1;
                processingBuildID = this.gvList.Rows[e.RowIndex].Cells["BuildID"].Value.ToString();

                ProcessDataDelegate d1 = processData;
                IAsyncResult ar = d1.BeginInvoke(processingBuildID, null, null);
                //while (!ar.IsCompleted)
                //{
                //}
                //int result = d1.EndInvoke(ar);

                ProcessOperator process = new ProcessOperator();
                process.MessageInfo = "正在拼命处理中,请稍候...";
                process.BackgroundWork = this.Do;
                process.BackgroundWorkerCompleted += new EventHandler<BackgroundWorkerEventArgs>(process_BackgroundWorkerCompleted);
                process.Start();
            }
        }

      

     //委托方法

        int processData(string buildid)
        {
            //进行能耗数据的更新
            return IsSucess = BuildOperatorBLL.GetDataCorrectByID(processingBuildID);
        }

        #region 增加进度条
        void process_BackgroundWorkerCompleted(object sender, BackgroundWorkerEventArgs e)
        {
            if (e.BackGroundException == null)
            {
                BindData(currentPage);
                MessageBox.Show("执行完毕");
            }
            else
            {
                MessageBox.Show("异常:" + e.BackGroundException.Message);
            }
        }

        void Do()
        {
            while (IsSucess < 0)
            {
                Thread.Sleep(20);
            }
        }

        #endregion

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi是一种用于开发Windows桌面应用程序的编程语言。在Delphi中实现多线程进度条功能可以提高程序的响应速度和用户体验。 多线程允许程序同时执行多个任务,从而提高程序的性能。在Delphi中,可以通过创建TThread类的实例来实现多线程。使用TThread可以在后台执行耗时的操作,而不会阻塞界面的UI线程。通过多线程,可以将任务拆分成多个子任务,在各个线程中同时执行,从而提高处理速度。 进度条用于显示任务的执行进度,让用户能够实时了解任务的完成情况。在Delphi中,可以使用TProgressBar组件来实现进度条功能。通过设置进度条的最小值和最大值,以及当前进度的属性,可以实时更新进度条显示。 在Delphi中,结合多线程进度条的实现步骤如下: 1. 创建TThread类的子类,在其中重写Execute方法,编写耗时操作的代码。 2. 在主线程中创建进度条TProgressBar的实例,并设置相关属性,如最小值、最大值和初始值。 3. 在多线程的Execute方法中,可以通过调用Synchronize方法在主线程中更新进度条的当前值,以实时显示任务的进度。 4. 在任务完成时,关闭进度条或者将进度条设为100%,以表示任务已完成。 多线程进度条的结合可以提高程序的性能和用户体验,让用户在进行耗时操作时能够了解任务的进度,并在界面上及时显示。在使用多线程时,需要注意线程之间的同步问题,避免出现竞争条件和死锁等问题,保证程序的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值