private void Launch(object sender, RoutedEventArgs e) { #if DEBUG Stopwatch globalWatch = new Stopwatch(); globalWatch.Start(); #endif //Al tener que usar un wraper para poder pasar una lista de strings al Data grid ahora hay que hacer esta movida para recuperarlo //"ENB_O_AVILES_MAGDALENA_CT_01","ENB_PO_SAN_VICENTE_EB_01" ->prueba String[] aux = new String[lnBtsInputGrid.Count]; int i; for (i = 0; i < 50; i++) { if (lnBtsInputGrid[i].lnBtsName == "") { break; } aux[i] = lnBtsInputGrid[i].lnBtsName; } string[] lnBtsInputs = new string[i]; for (int j = 0; j < i; j++) { lnBtsInputs[j] = aux[j]; } aux = null; //Se crean objetos que albergan las tablas de datos que se necesitan en esta herramienta RSLTE31 R31 = new RSLTE31(lnBtsInputs, RSLTE31_path.Text); TimingAdvance TA = new TimingAdvance(lnBtsInputs, TA_path.Text); Exports export = new Exports(TA.GetColumn("LNCEL name"), SRAN_path.Text, FL18_path.Text); //Procesado paralelo de cada una de las colindancias, ya que son independientes salvo en la escritura, que está sincronizada Parallel.ForEach(export.data.AsEnumerable(), dataRow => { colindancias.CheckColin(dataRow, R31); }); Parallel.ForEach(R31.NotInExports().AsEnumerable(), dataRow => { colindancias.CheckColinsNotInExports(dataRow); }); colindancias.AddENBID(); colinGrid.ItemsSource = colindancias.data.DefaultView; //Se calculan las candidatas para BlackListing y para Offset, que quedaran disponibles para la edicion manual del usuario en la interfaz grafica CandidatesBL candBL = new CandidatesBL(colindancias); candBLGrid.ItemsSource = candBL.data.DefaultView; CandidatesOFF candOFF = new CandidatesOFF(TA, colindancias, candBL); candOFFGrid.ItemsSource = candOFF.data.DefaultView; #if DEBUG globalWatch.Stop(); Console.WriteLine("Global time: " + (double)globalWatch.ElapsedMilliseconds / 1000.0 + "s"); #endif }
//nunca se puede acceder a elementos de la interfaz directamente desde este metodo, acceder a la interfaz desde otro thread //bloquea la aplicacion private void BackGround_Work(object sender, DoWorkEventArgs e) { #if DEBUG int porc = 0; var totalTimer = new Stopwatch(); totalTimer.Start(); var timer = new Stopwatch(); timer.Start(); #endif bgwBlnOffArgument args = (bgwBlnOffArgument)e.Argument; bgwBlnOffResult results = new bgwBlnOffResult(); if (args.BLnOffEnabled) { //Se crean objetos que contienen las tablas de datos que se necesitan en esta herramienta Colindancias colindancias = new Colindancias(); RSLTE31 R31 = new RSLTE31(args.lnBtsInputs, args.pathR31); R31.completeR31(args.pathSRAN, args.pathFL18, args.pathSRAN2, args.srandividio, args.conFL18); #if DEBUG timer.Stop(); Console.WriteLine("Completar consulta31: " + timer.Elapsed.ToString(@"m\:ss\.fff")); timer.Reset(); timer.Start(); #endif TimingAdvance TA = new TimingAdvance(args.lnBtsInputs, args.pathTA); #if DEBUG timer.Stop(); Console.WriteLine("Sacar Timing Advance: " + timer.Elapsed.ToString(@"m\:ss\.fff")); timer.Reset(); timer.Start(); #endif Exports export = new Exports(TA.GetColumn("LNCEL name"), args.pathSRAN, args.pathFL18, args.pathSRAN2, args.srandividio, args.conFL18); #if DEBUG timer.Stop(); Console.WriteLine("Sacar Exports: " + timer.Elapsed.ToString(@"m\:ss\.fff")); timer.Reset(); timer.Start(); porc = 5; worker.ReportProgress(porc); #endif foreach (DataRow dataRow in export.data.Rows) { colindancias.CheckColin(dataRow, R31); } int a = 0; foreach (DataRow dataRow in R31.NotInExports()) { colindancias.CheckColinsNotInExports(dataRow); } colindancias.AddENBID(); if (args.rellenarLabel) { colindancias.rellenarLabelUnknown(args.pathSRAN, args.pathSRAN2, args.srandividio); } porc = 15; worker.ReportProgress(porc); //Dibujar tablas DataView dv = colindancias.data.DefaultView; dv.Sort = "[HO errores SR] DESC"; colindancias.data = dv.ToTable(); results.colindancias = colindancias.data; results.siteCoordErrors = colindancias.GetSiteCoordErr(); porc = 25; #if DEBUG timer.Stop(); Console.WriteLine("Calcular Colindancias: " + timer.Elapsed.ToString(@"m\:ss\.fff")); timer.Reset(); timer.Start(); #endif //Se calculan las candidatas para BlackListing y para Offset, que quedaran disponibles para la edicion manual del usuario en la interfaz grafica CandidatesBL candBL = new CandidatesBL(colindancias); dv = candBL.data.DefaultView; dv.Sort = "[HO errores SR] DESC"; candBL.data = dv.ToTable(); results.candBl = candBL.data; porc = 50; #if DEBUG timer.Stop(); Console.WriteLine("Calcular candidatas de blacklisting: " + timer.Elapsed.ToString(@"m\:ss\.fff")); timer.Reset(); timer.Start(); #endif CandidatesOFF candOFF = new CandidatesOFF(TA, colindancias, candBL); dv = candOFF.data.DefaultView; dv.Sort = "[HO errores SR] DESC"; candOFF.data = dv.ToTable(); results.candOff = candOFF.data; porc = 75; worker.ReportProgress(porc); #if DEBUG timer.Stop(); Console.WriteLine("Calcular candidatas de offset: " + timer.Elapsed.ToString(@"m\:ss\.fff")); timer.Reset(); timer.Start(); #endif } if (args.prevAnalisysEnabled) { NIR48H nir = new NIR48H(args.lnBtsInputs, args.pathNIR48); results.error = nir.errors; results.nirPlotData = nir.data; #if DEBUG timer.Stop(); Console.WriteLine("Analisis Previo: " + timer.Elapsed.ToString(@"m\:ss\.fff")); #endif } e.Result = results; porc = 100; worker.ReportProgress(porc); #if DEBUG timer.Stop(); totalTimer.Stop(); Console.WriteLine("Tiempo Total: " + totalTimer.Elapsed.ToString(@"m\:ss\.fff")); #endif }