private void SelectAndConvertColumns_button_Click(object sender, RibbonControlEventArgs e) { if (Globals.ThisAddIn.Application.Selection is Excel.Range) { Excel.Range rng = (Excel.Range)Globals.ThisAddIn.Application.Selection; if ((this.From_dropDown.SelectedItemIndex < 1 && rng.Columns.Count == 1) || (this.From_dropDown.SelectedItemIndex > 0 && rng.Columns.Count == 2)) { // Shift Cells so that nothing is overwritten if (this.To_dropDown.SelectedItemIndex < 1) { ((Excel.Range)rng.get_Item(1, rng.Columns.Count)).get_Offset(0, 1).EntireColumn.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, Type.Missing); } else { rng.Worksheet.get_Range(((Excel.Range)rng.get_Item(1, rng.Columns.Count)).get_Offset(0, 1).EntireColumn, ((Excel.Range)rng.get_Item(1, rng.Columns.Count)).get_Offset(0, 2).EntireColumn).Insert(Excel.XlInsertShiftDirection.xlShiftToRight, Type.Missing); } //ManualResetEvent[] doneEvents = new ManualResetEvent[rng.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row]; int lastRow = rng.Worksheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row; for (int i = 1; i <= rng.Rows.Count && ((Excel.Range)rng.get_Item(i, 1)).Row <= lastRow; i++) { //doneEvents[i - 1] = new ManualResetEvent(false); RowConverter rowConverter = new RowConverter(rng, i, this.From_dropDown.SelectedItem.Label, this.To_dropDown.SelectedItem.Label); //, doneEvents[i - 1]); rowConverter.convertRow(); //new Thread(new ThreadStart(rowConverter.convertRow)).Start(); //ThreadPool.QueueUserWorkItem(rowConverter.ThreadPoolCallback, i); } //foreach (ManualResetEvent handle in doneEvents) //{ // handle.WaitOne(); //} //WaitHandle.WaitAll(doneEvents); // Autofit Cells if (this.To_dropDown.SelectedItemIndex < 1) { ((Excel.Range)rng.get_Item(1, rng.Columns.Count)).get_Offset(0, 1).EntireColumn.AutoFit(); } else { rng.Worksheet.get_Range(((Excel.Range)rng.get_Item(1, rng.Columns.Count)).get_Offset(0, 1).EntireColumn, ((Excel.Range)rng.get_Item(1, rng.Columns.Count)).get_Offset(0, 2).EntireColumn).AutoFit(); } } else { MessageBox.Show("Invalid Selection!"); } } else { MessageBox.Show("You must select a worksheet range."); } }