• BackgroundWorker示例


    代码
    public partial class MyClass
    {
    private BackgroundWorker worker = null;
    private Form frmProgress = null;
    public MyClass()
    {
    InitializeComponent();
    worker
    = new BackgroundWorker(); // 初始化
    worker.WorkerReportsProgress = true; //报告进度更新
    worker.WorkerSupportsCancellation = true; //可以异步取消
    worker.DoWork += new DoWorkEventHandler(DoWorks); //在DoWorks()里定义异步要干的事
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted); //DoWorks完成后要做的事WorkerCompleted()
    }

    //主线程,点击按钮引发的事件
    private void tsBtnExport_Click(object sender, EventArgs e)
    {
    OleDbConnection conExcel
    = new OleDbConnection(strConn);
    try
    {
    OpenFileDialog openFile
    = new OpenFileDialog();//打开文件对话框。
    openFile.Filter = ("Excel 文件(*.xls)|*.xls");//后缀名。
    if (openFile.ShowDialog() == DialogResult.OK)
    {
    if (worker.IsBusy) worker.CancelAsync();
    if (worker.CancellationPending) return;
    ArrayList al
    = new ArrayList();
    al.Add(openFile.FileName);
    al.Add(
    "Import");
    worker.RunWorkerAsync(al);
    ProgressShow();
    }
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.ToString());
    }
    finally
    {
    conExcel.Close();
    }
    }

    /// <summary>
    /// 导入导出主要操作(后台线程)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e">异步过来的参数</param>
    private void DoWorks(object sender, DoWorkEventArgs e)
    {
    if (e.Argument != null)
    {
    try
    {
    if (((ArrayList)(e.Argument))[1].ToString() == "Import")
    {
    string filename = ((ArrayList)(e.Argument))[0].ToString();
    string strSql = "select distinct officeid from tbl_member";
    DataSet ds
    = SqlHelper.ExecuteSqlReturnDs(strConn, strSql);
    //List<string> liStr = new List<string>();
    StringBuilder sbList = new StringBuilder("");
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
    //liStr.Add(ds.Tables[0].Rows[i]["distinct"].ToString());
    sbList.Append("'" + ds.Tables[0].Rows[i]["officeid"].ToString() + "',");
    }
    if (sbList.ToString() != "")
    {
    string strList = sbList.ToString().TrimEnd(',');
    strSql
    = "delete from tbl_member where officeid in (" + sbList + ") or officeid is null";
    int affectRows = SqlHelper.ExecuteSql(strConn, strSql);
    }
    string sql = "insert into tbl_member select * from [Excel 8.0;database=" + filename + "].[用户表$]
    SqlHelper.ExecuteSql(strConn, sql);
    strOper
    = "Import";
    }
    }
    catch (Exception eIm)
    {
    MessageBox.Show(
    "导入时出错:" + eIm.Message);
    }

    /// <summary>
    /// 主线程显示稍候框
    /// </summary>
    private void ProgressShow()
    {
    frmProgress
    = new FrmProgress();
    frmProgress.StartPosition
    = FormStartPosition.CenterScreen;
    frmProgress.ShowDialog();
    }

    private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    frmProgress.Close();
    frmProgress.Dispose();
    if (e.Error == null)
    {
    if (strOper == "Export")
    MessageBox.Show(
    "导出数据成功", "导出数据", MessageBoxButtons.OK, MessageBoxIcon.Information);
    if (strOper == "Import")
    MessageBox.Show(
    "导入数据成功", "导入数据", MessageBoxButtons.OK, MessageBoxIcon.Information);
    strOper
    = "";
    }
    }

    }


    代码
    /// <summary>
    ///
    /// </summary>
    private int branchid = 0;
    /// <summary>
    ///
    /// </summary>
    private string sType = string.Empty;

    ReportDocument paymoneyReport
    = null;

    private CH_HandOverDetails()
    {
    InitializeComponent();
    }

    public CH_HandOverDetails( int branchID,string sType )
    {

    InitializeComponent();
    this.branchid = branchID;
    this.sType = sType;
    //初始化
    InitBackGroundWorker();
    }

    void InitBackGroundWorker()
    {
    worker.WorkerReportsProgress
    = true; //报告进度更新
    worker.WorkerSupportsCancellation = true; //可以异步取消
    worker.DoWork += new DoWorkEventHandler(DoWorks); //在DoWorks()里定义异步要干的事
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted); //DoWorks完成后要做的事WorkerCompleted()
    }

    private void DoWorks(object sender, DoWorkEventArgs e)
    {

    MIS.CrystalReportAndDataSet.CH_CheckoutDetailsDataSetTableAdapters.CH_CheckOutDetailTableAdapter da
    =
    new MIS.CrystalReportAndDataSet.CH_CheckoutDetailsDataSetTableAdapters.CH_CheckOutDetailTableAdapter();
    da.Connection
    = new SqlConnection(DAL.DBConfig.Instance.ConnectionString);

    MIS.CrystalReportAndDataSet.CH_CheckoutDetailsDataSet.CH_CheckOutDetailDataTable
    dtTmp
    = da.GetData(this.branchid, this.sType);

    paymoneyReport
    = new ReportDocument();
    string reportPath = Application.StartupPath + "\\..\\..\\CrystalReportAndDataSet\\CH_CheckoutDetails.rpt";
    paymoneyReport.Load(reportPath);
    paymoneyReport.SetDataSource(dtTmp
    as DataTable);

    }

    private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    this.lblProgress.Text = "加载完成!";
    this.crystalReportViewer1.ReportSource = paymoneyReport;
    this.btnConfirm.Enabled = true;
    }


    private void CH_HandOverDetails_Load(object sender, EventArgs e)
    {
    this.btnConfirm.Enabled = false;
    this.Text = "收银交接统计表";
    //异步加载
    worker.RunWorkerAsync();
    }

    private void btnClose_Click(object sender, EventArgs e)
    {
    this.Close();
    }

    private void btnConfirm_Click(object sender, EventArgs e)
    {

    //确认
    CheckBox chkConfirm = this.Owner.Controls.Find("chkConfirm", false)[0] as CheckBox;
    //chkConfirm.Enabled = true;
    if (chkConfirm != null)
    {
    chkConfirm.Checked
    = true;
    this.Close();
    }
    }
  • 相关阅读:
    品优购(IDEA版)-第二天
    品优购(IDEA版)-第一天
    GitHub客户端Desktop的安装和使用总结
    Android开发10:传感器器及地图相关应用
    Android开发9:网络访问&Web服务开发
    Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用
    Android开发7:简单的数据存储(使用SharedPreferences)和文件操作
    Android开发6:Service的使用(简单音乐播放器的实现)
    归纳整理一些工作学习中发现的不错的网站、博客地址等(转载)
    Android Studio安装配置、环境搭建详细步骤及基本使用
  • 原文地址:https://www.cnblogs.com/wucg/p/1758317.html
Copyright © 2020-2023  润新知