博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# winform BackgroundWorker 控件的使用
阅读量:4041 次
发布时间:2019-05-24

本文共 5600 字,大约阅读时间需要 18 分钟。

用BackgroundWorder 加 progressbar 常用于在頁面長時間處理事件中顯示進度條. 

WorderReportProgress \ WorkerSupportCancellation 屬性設置為True.

1、调用BackgroundWorker的RunWorkerAsync方法(可以传递参数),它将调用DoWork事件

2、在DoWork的事件响应代码中调用耗时的操作.
3、在耗时操作中判断CancellationPending属性,如果为false则退出
4、如果要向用户界面发送信息,则调用BackgroundWorker的ReportProgress方法,它将调用ProgressChanged事件(可以将改变通过object类型传递)
5、在ProgressChanged事件的响应代码中将改变呈现给用户
6、如果需要取消耗时操作,则调用BackgroundWorker的CancelAsync方法,需要和步骤3一起使用

例如:

///         /// do work event. 耗時事件        ///         ///         ///         private void bgWorker_DoWork(object sender, DoWorkEventArgs e)        {            //export to excel            string[] tableName = { "WI", "WI_Details" };            exporttoexcel.ExportExcel(ds, false, this.bgw, tableName);               //  frmMain.form1.bgWorker.ReportProgress(percent);  //在耗時事件ExportExcel 中間,報告進度,這時會調用   bgWorker_ProgressChanged事件                }        ///         /// 耗時事件中進度條變化        ///         ///         ///         public void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)        {                      pgBar.Value = e.ProgressPercentage;          }        ///         /// 耗時事件完成后        ///         ///         ///         private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)        {            bgWorker.Dispose();            pgBar.Value = 0;            pgBar.Visible = false;                              }//-------------------------------------------------    class ExportToExcel{              ///         /// export the dataset to excel        ///         /// the dataset will be exported to excel        /// set the odd and event rows have different color.         /// the name of BackgroundWorker.  yes        /// sheets 's name         ///         public void ExportExcel(DataSet ds, bool oddEvenColor, object bgWorker,string[] tableName)    {               if (ds == null || ds.Tables .Count == 0) return;        try        {            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();            if (xlApp == null)            {                return;            }            System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");            Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;                    Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add();                int rowRead = 0;                int rowCount = 0;                //get the table's rows count                foreach (DataTable dt in ds.Tables)                {                    rowCount += dt.Rows.Count;                }                               for (int tbi = 0; tbi < ds.Tables.Count; tbi++)                {                                    Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet) workbook.Worksheets.Add();                    worksheet.Name = tableName[tbi].ToString();                    if (worksheet == null)//工作薄中没有工作表                    {                        return;                    }                    Microsoft.Office.Interop.Excel.Range range;                          int percent = 0;                    //title column name                    for (int i = 0; i < ds.Tables[tbi].Columns.Count; i++)                    {                        worksheet.Cells[1, i + 1] = ds.Tables[tbi].Columns[i].ColumnName;                        range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];                        range.Interior.ColorIndex = 31;                        range.Font.Size = 12;                        range.Font.Bold = true;                        range.Borders.LineStyle = 1;                        range.Font.ColorIndex = 2;//white                     }                    //content                                    for (int r = 0; r < ds.Tables[tbi].Rows.Count; r++)                    {                        if (bgWorker != null && (bgWorker as BackgroundWorker).CancellationPending)                            //if (frmMain.form1.bgWorker.CancellationPending)//如果有取消則退出導出                                                    break;                        for (int i = 0; i < ds.Tables[tbi].Columns.Count; i++)                        {                            worksheet.Cells[r + 2, i + 1] = ds.Tables[tbi].Rows[r][i].ToString();                                                    }                        rowRead++;                        percent = ((int)(100 * rowRead)) / rowCount;                        if (bgWorker != null && percent <= 100)                        {                            (bgWorker as BackgroundWorker).ReportProgress(percent);                            //frmMain.form1.bgWorker.ReportProgress(percent);                                                }                    }   range = worksheet.Range(worksheet.Cells[2, 1], worksheet.Cells[ds.Tables[tbi].Rows.Count + 1, ds.Tables[tbi].Columns.Count])                            range.Borders.LineStyle = 1;                            if (oddEvenColor)                            {                                if (r % 2 == 1)                                    range.Interior.ColorIndex = 34;//隔行換底色                            }                            range.Font.Size = 9;                    worksheet.Columns.AutoFit(); //列寬自適應                }            xlApp.Visible = true;        }        catch (Exception e)        {            throw (e);        }    }

 

转载地址:http://enmdi.baihongyu.com/

你可能感兴趣的文章
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
在C++中使用Lua
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
关于AIS编码解码的两个小问题
查看>>
GitHub 万星推荐:黑客成长技术清单
查看>>
可以在线C++编译的工具站点
查看>>
关于无人驾驶的过去、现在以及未来,看这篇文章就够了!
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
为什么读了很多书,却学不到什么东西?
查看>>
长文干货:如何轻松应对工作中最棘手的13种场景?
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.147 - LeetCode1108
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>