Лабораторная работа 1 - Разработка нового распределенного приложения для инструментария Alchemi
Метод, в котором производится обработка грид-потоков на локальной машине
public partial class MainForm : Form
{
...
/// <summary>
/// Вычисляет график комплексной функции на локальной машине.
/// </summary>
void BuildGraphLocal()
{
// Устанавливаем диапазоны аргументов
double xmin = (double)spinnerXMin.Value;
double xmax = (double)spinnerXMax.Value;
double ymin = (double)spinnerYMin.Value;
double ymax = (double)spinnerYMax.Value;
// Устанавливаем насыщенность белого и черного цвета
double white = (double)spinnerWhiteSaturation.Value;
double black = (double)spinnerBlackSaturation.Value;
// Устанавливаем число горизонтальных и вертикальных разбиений
int hor = (int)spinnerHorCells.Value;
int ver = (int)spinnerVerCells.Value;
// Устанавливаем ширину и высоту изображения графика
int width = (int)spinnerWidth.Value;
int height = (int)spinnerHeight.Value;
// Создаем точечный рисунок для хранения изображения графика
image = new Bitmap(width, height);
// Отображаем изображение графика на элементе управления PictureBox
pictureBoxGraph.Image = image;
// Формируем комплексную функцию на основе введенной строки
BaseFunction funct = Parser.ParseString(textBoxFunction.Text);
// Проверяем, удалось ли сформировать функцию
if (funct == null)
{
// Выводим сообщение об ошибке
MessageBox.Show("It is not possible to distinguish function. Check up input.");
// Выходим из процедуры
return;
}
// Вычисляем ширину и высоту частей изображения
int cellwidth = width / hor;
int cellheight = height / ver;
// Вычисляем изменения аргументов в частях области
double xstep = (xmax - xmin) / hor;
double ystep = (ymax - ymin) / ver;
// Обновляем текущее и максимальное значение полосы прогресса
progressBarBuildGraph.Value = 0;
progressBarBuildGraph.Maximum = hor * ver;
// Сохраняем время начала вычислений
startTime = DateTime.Now;
// Формируем грид-потоки и исполняем их на локальной машине
for (int hornumber = 0; hornumber < hor; hornumber++)
{
for (int vernumber = 0; vernumber < ver; vernumber++)
{
// Создаем грид-поток для обработки части графика
ComplexThread thread = new ComplexThread(cellwidth, cellheight,
hornumber, vernumber,
xmin + xstep * hornumber,
xmin + xstep * (hornumber + 1),
ymax - ystep * (vernumber + 1),
ymax - ystep * vernumber,
funct, white, black);
// Запускаем грид-поток на выполнение
thread.Start();
// Обновляем прогресс вычислений
UpdateProgress(thread);
}
}
}
...
}