private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { backgroundWorkerParameter param = e.Argument as backgroundWorkerParameter; if (pm is PMed3) { if (!pm.ComputeSolutions(param.Parallel, param.Clusters)) { MessageBox.Show("An Error as occured, check Console Text Box for info.\r\n Maybe out of memory exception.", "PMedLib.dll error"); //MessageBox.Show("It's Better Close program and restart it!!!", "Warning !!!", MessageBoxButtons.OK, MessageBoxIcon.Stop); } // else //tutto ok... // { // } } else { pm.ComputeSolutions(param.Parallel, param.Clusters); } //metto qui l'aggiornamenti della form e vari... ConsoleAppendText("\r\nFinished Computing Solutions..."); ConsoleAppendText(String.Format("\r\n--- Best Solution is {0} = {1}", pm.BestSolutionIndex, pm.Solutions[pm.BestSolutionIndex])); if (pm.WrapperSolution > 0) { ConsoleAppendText(String.Format("\r\n--- Wrapper Solution is = {0}", pm.WrapperSolution)); } pm.ShowElapsedTime(); ConsoleAppendText(String.Format("\r\nPopulating solution viewer...")); Stopwatch solw = new Stopwatch(); solw.Start(); //aggiorno la lista delle soluzioni alla fine... così da rendere l'algortimo più efficente... try { for (uint i = 0; i < pm.Nsolution; i++) { if (SolutionViewer.InvokeRequired) { SolutionViewer.Invoke(UpdateSolutionVieverCallBack, i); } else { UpdateSolutionViever(i); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "PMedian Project - Solution Viewer"); //cancello la lista altrimenti può crashare tutto!!! //e metto solo il meglio trovato... if (SolutionViewer.InvokeRequired) { SolutionViewer.Invoke(SolutionViewerClearCallBack); SolutionViewer.Invoke(UpdateSolutionVieverCallBack, pm.BestSolutionIndex); } else { SolutionViewer.Nodes.Clear(); UpdateSolutionViever(pm.BestSolutionIndex); } } solw.Stop(); ConsoleAppendText(String.Format("\r\nTime Elapsed Pouplation Solution Viewer {0}", solw.Elapsed)); }