现在的位置: 首页 > 综合 > 正文

winform 多线程执行操作,并跨线程操作控件

2018年01月23日 ⁄ 综合 ⁄ 共 2513字 ⁄ 字号 评论关闭

private bool isSucceed = false;

private string ErrMsg = "";

public delegate void MyInvoke(DataTable dt);

 private void btnConfirm_Click(object sender, EventArgs e)

  {

          this.Enabled = false;

          TT();

}

private void TT()

        {

            BackgroundWorker backgroundWorker = new BackgroundWorker();

            backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);

            backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);

            backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);

            backgroundWorker.WorkerReportsProgress = true;

            backgroundWorker.RunWorkerAsync();

        }

 

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

        {

            try

            {

                this.frmPaymentList.CloseFrmLoad("frmLoad");

                this.Enabled = true;

                if (this.isSucceed)

                {

                    CJZFFramework.Provider.FormBase.CJZFMessageBox.ShowTips(this, ErrMsg.Trim());

                }

                else

                {

                    CJZFFramework.Provider.FormBase.CJZFMessageBox.ShowTips(this, ErrMsg.Trim());

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

            }

        }

 

        private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)

        {

            if (e.ProgressPercentage == 0)

            {

                this.isSucceed = true;

            }

            else

            {

                this.isSucceed = false;

            }

            this.ErrMsg = e.UserState.ToString();

        }

        //多线程执行

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)

        {

            BackgroundWorker backgroundWorker = null;

            try

            {

                backgroundWorker = sender as BackgroundWorker;

                CreateBill();

                backgroundWorker.ReportProgress(0, "单据导出已完成");

            }

            catch (Exception ex)

            {

                backgroundWorker.ReportProgress(1, "导出单据失败");

            }

        }

private void CreateBill()

{

//创建单据.

 if(true)

{

DataTable rt = new DataTable();

SetSource(rt);

}

}

private void SetSource(DataTable dt)

{

            if (gvCreateBillLog.InvokeRequired)

            {

                MyInvoke _myInvoke = new MyInvoke(SetSource);

                this.Invoke(_myInvoke, new object[] { dt });

            }

            else

            {

                this.gvCreateBillLog.DataSource = dt;

            }

}         

抱歉!评论已关闭.