private void button14_Click(object sender, EventArgs e) { InfaDlyaExperimentaCIzmenenPoroga infa = new InfaDlyaExperimentaCIzmenenPoroga(); infa.min = Convert.ToDouble(dataGridView9.Rows[0].Cells[1].Value); infa.max = Convert.ToDouble(dataGridView9.Rows[1].Cells[1].Value); infa.shag = Convert.ToDouble(dataGridView9.Rows[2].Cells[1].Value); progressBar1.Value = 0; progressBar1.Maximum = Convert.ToInt32((infa.max - infa.min) / infa.shag) + 2; Task.Factory.StartNew(() => { ExperimentCIzmenenPoroga(infa); }); //Создание и запуск нового потока }
public void ExperimentCIzmenenPoroga(object a) { InfaDlyaExperimentaCIzmenenPoroga infa = (InfaDlyaExperimentaCIzmenenPoroga)a; int countRow = ocenkaAnomalii.Length; for (double i = infa.min; i < infa.max; i += infa.shag) { int TP = 0; int TN = 0; int FP = 0; int FN = 0; bool[] predictedClass = new bool[countRow]; //Определение класса на основе порога for (int k = 0; k < countRow; k++) { if (ocenkaAnomalii[k] > i) { predictedClass[k] = true; } else { predictedClass[k] = false; } } for (int k = 0; k < countRow; k++) { if ((trueClass[k] == true) && (trueClass[k] == predictedClass[k])) { TP++; } if ((trueClass[k] == false) && (trueClass[k] == predictedClass[k])) { TN++; } if ((trueClass[k] == true) && (trueClass[k] != predictedClass[k])) { FP++; } if ((trueClass[k] == false) && (trueClass[k] != predictedClass[k])) { FN++; } } string[] row = calculatingMetriks(i, TP, TN, FP, FN); dataGridView10.Invoke((Action)(() => { dataGridView10.Rows.Add(row); })); int obmen = TP; TP = TN; TN = obmen; obmen = FP; FP = FN; FN = obmen; row = calculatingMetriks(i, TP, TN, FP, FN); dataGridView11.Invoke((Action)(() => { dataGridView11.Rows.Add(row); })); label1.Invoke((Action)(() => { label1.Text = "Порог:" + i + "/" + infa.max; })); progressBar1.Invoke((Action)(() => { progressBar1.Value++; })); } }