//основной метод public void Generate() { Drawer drawer = new Drawer();//художник рисующий вывески drawer.Clear(data.Controll1);//очистка полотен drawer.Clear(data.Controll2); drawer.Clear(data.Controll3); //создание экземпляра генератора generator = new DiscreteInverseGenerator(data.Values); for (int i = 0; i < data.SamplingVolume; i++)//генерация выборки { lock (Answer)//синхронизация по контейнеру с результатами { Answer.progress = 2 * (i + 1);//задание текущего прогресса } sampling.AddValue(generator.GenerateValue());//добавление сгенерированного значения к выборке } //создаём экземпляр контроллера критерия пирсона PirsonController PirsonControl = new PirsonController(data.Controll3, sampling, Answer, 2, data.Values.Count, null); Thread PirsonThread = new Thread(PirsonControl.Calculate);//помещаем конроллер в нить PirsonThread.Start();//запускаем нить //создаём экземпляр контроллера критерия колмогорова KolmogorovController KolmogorovControl = new KolmogorovController(data.Controll2, sampling, Answer, 2); Thread KolmogorovThread = new Thread(KolmogorovControl.Calculate);//помещаем контроллер в нить KolmogorovThread.Start();// запускаем нить drawer.DrawGraph1(data.Controll1, sampling, 2); lock (Answer) { Answer.sampling = sampling;//ложим выборку в контейнер результов Answer.GenerationFinished = true;//вычисления завершены } }
public void Calculate() { PirsonCriterion Criterion = new PirsonCriterion(sampling, Intervals);//критерий пирсона Drawer drawer = new Drawer();//художник рисующий вывески if (sampling.GetVolume() >= 100)//критерий не вычисляется если объём выборки <100 { PirsonContainer PirsonAnswer = Criterion.Calculate(FuncType);//вычисление критерия lock (Answer) { //сохраниение результатов Answer.Pirson = PirsonAnswer; Answer.PirsonCalculated = true; Answer.progress += sampling.GetVolume();//прогресс +25% } if(FuncType==0) { //отрисовка графика drawer.DrawGraph3(DrawPanel, PirsonAnswer, FuncType, UniversalBorders); } else { drawer.DrawGraph3(DrawPanel, PirsonAnswer, FuncType);//отрисовка графика } } //если критерий не вычисляется else { drawer.Clear(DrawPanel);//очистка полотна } lock(Answer) { Answer.PirsonFinished = true;//вычисления завершены } }