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

    技术2023-03-28  17

    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;

                }

    }         

    最新回复(0)