public void WriteCellsAsync(GenerateCellValueDelegate GetValue) { m_ProgressWindow = new Controls.ExecuteProgress(); m_ProgressWindow.AutoCloseAfterComplete = true; m_BackWorker_WriteCell.RunWorkerAsync(GetValue); m_ProgressWindow.Show(); }
private void BackWorkerWriteCell_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; GenerateCellValueDelegate GetValue = e.Argument as GenerateCellValueDelegate; Microsoft.Office.Interop.Excel.Range selRang = Globals.ThisAddIn.Application.Selection as Microsoft.Office.Interop.Excel.Range; Int32 cellTotal = 0; if (selRang != null && selRang.Cells.Count > 0) { cellTotal = selRang.Cells.Count; for (Int32 i = 1; i <= cellTotal; i++) { // 主要任务处理 Microsoft.Office.Interop.Excel.Range c = (Microsoft.Office.Interop.Excel.Range)selRang.Cells[i]; c.Value = GetValue(c).ToString(); // 提交处理进度 Int32 p = (Int32)(((Double)(i + 1) / cellTotal) * 100); worker.ReportProgress(p); } } }