using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Reflection.Emit;
using static System.Windows.Forms.AxHost;
using System.Threading;

namespace WindowsFormsApp1
{
    public partial class Form2 : Form
    {
        // Variable Declarations
        public double[,] PZT;        // Массив значений функции Z
        public double ShagY;         // Шаг изменения аргументов Y
        public double MaxX, MinX, MaxY, MinY, ShagX;
        public int NN, I, J;
        public string FileN, FileE, LineS;
        public StreamReader StRead;
        public StreamWriter StWrit;
        public double[] PXT, PYT;    // Массив аргументов X, Массив значений функции Y
        public DateTime BT, FT;      // Время начала и окончания процесса
        public TimeSpan ST;          // Длительность процесса
        public ThreadWithState tstat;
        private Thread thred;
        private ThreadCallBack tcallRes;
        private int TH;
        public ThreadWithState tstat1, // Объявление объекта tstat1 класса ThreadWithState
                                tstat2, // Объявление объекта tstat2 класса ThreadWithState
                                tstat3; // Объявление объекта tstat3 класса ThreadWithState
        public Thread thred1, // Объявление объекта thred1 класса Thread
                        thred2, // Объявление объекта thred2 класса Thread
                        thred3; // Объявление объекта thred3 класса Thread

        public Form2()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Создание объектов tstat1, tstat2, tstat3 класса ThreadWithState и передача в конструктор параметров (NN, MinX, MaxX, MinY, MaxY, TH, tcallRes)
            ThreadWithState tstat1 = new ThreadWithState(NN, MinX, MaxX, MinY, MaxY, 1, new ThreadCallBack(tcallRes));
            ThreadWithState tstat2 = new ThreadWithState(NN, MinX, MaxX, MinY, MaxY, 2, new ThreadCallBack(tcallRes));
            ThreadWithState tstat3 = new ThreadWithState(NN, MinX, MaxX, MinY, MaxY, 3, new ThreadCallBack(tcallRes));

            // Создание объектов thred1, thred2, thred3 класса Thread и запуск рабочей функции потока ThreadDoWork
            Thread thred1 = new Thread(new ThreadStart(tstat1.ThreadDoWork));
            Thread thred2 = new Thread(new ThreadStart(tstat2.ThreadDoWork));
            Thread thred3 = new Thread(new ThreadStart(tstat3.ThreadDoWork));

            // Запуск потоков thred1, thred2, thred3
            thred1.Start();
            thred2.Start();
            thred3.Start();

            // Приостановка главного потока программы и ожидание завершения потоков thred1, thred2, thred3
            thred1.Join();
            thred2.Join();
            thred3.Join();

            try // Начало секции обработки исключительной ситуации
            {
                thred1.Abort(); // Завершение работы потока thred1
                thred2.Abort(); // Завершение работы потока thred2
                thred3.Abort(); // Завершение работы потока thred3
            }
            catch (ThreadAbortException) // Исключение, вызванное ошибкой при завершении потока
            {
                // Обработка любой исключительной ситуации
            }


            TH = Convert.ToInt32(textBox6.Text);
            BT = DateTime.Now;

            MaxX = Convert.ToDouble(textBox2.Text);
            NN = Convert.ToInt32(textBox3.Text);

            ConfigureProgressBar(NN);

            InitializeArrays(NN, MinX, MaxX);

            CalculatePYT(NN);

            WritePXTToFile("C://A_1.txt", PXT, NN);

            progressBar1.Value = progressBar1.Maximum;
            progressBar1.Refresh();

            UpdateTimeLabels(BT, FT);

            StartBackgroundThread();
        }
        private void ConfigureProgressBar(int nn)
        {
            progressBar1.Maximum = nn <= 100 ? 100 : nn;
            progressBar1.Step = nn <= 100 ? 1 : nn / 100;
            progressBar1.Minimum = 0;
            progressBar1.Value = 0;
        }
        private void InitializeArrays(int nn, double minX, double maxX)
        {
            PXT = new double[nn];
            PYT = new double[nn];
            ShagX = (maxX - minX) / (nn - 1);
            PXT[0] = minX;

            for (I = 1; I < nn; I++)
            {
                PXT[I] = PXT[I - 1] + ShagX;
                UpdateProgress();
            }
        }
        private void CalculatePYT(int nn)
        {
            for (I = 0; I < nn; I++)
            {
                PYT[I] = Math.Cos(Math.Pow(PXT[I], 3)) *
                         (4 * Math.Sin(PXT[I]) - Math.Sin(12 * PXT[I]) - 3 * Math.Sin(4 * PXT[I]));
                UpdateProgress();
            }
        }
        private void WritePXTToFile(string filePath, double[] pxt, int nn)
        {
            using (StWrit = new StreamWriter(filePath, false, Encoding.Default))
            {
                LineS = "PXT: ";
                for (I = 0; I < nn; I++)
                {
                    LineS += pxt[I].ToString() + (I < nn - 1 ? "; " : ";\n");
                }
                StWrit.WriteLine(LineS);
            }
        }
        private void UpdateTimeLabels(DateTime start, DateTime end)
        {
            FT = DateTime.Now;
            label10.Text = start.ToString("HH:mm:ss:fff");
            label11.Text = end.ToString("HH:mm:ss:fff");
            ST = end - start;
            label12.Text = $"{ST.Hours:D2}:{ST.Minutes:D2}:{ST.Seconds:D2}:{ST.Milliseconds:D3}";
        }
        private void StartBackgroundThread()
        {
            PZT = new double[NN, NN];
            tstat = new ThreadWithState(NN, MinX, MaxX, MinY, MaxY, TH, new ThreadCallBack(tcallRes));
            thred = new Thread(new ThreadStart(tstat.ThreadDoWork));
            thred.Start();
            thred.Join();
        }
        private void UpdateProgress()
        {
            if ((progressBar1.Value + progressBar1.Step) < progressBar1.Maximum)
            {
                progressBar1.Value += progressBar1.Step;
                progressBar1.Refresh();
                FT = DateTime.Now;
                ST = FT - BT;
                label11.Text = ST.ToString();
                label11.Refresh();
            }
        }

        public static void TcallRes(int cNN, int cTH, double[] cXT, double[]cYT, double[,] cZT)

        {
            DateTime BTcb = new DateTime(); // Время начала процесса
            string FileNcb = "D://A_cb_" + cTH.ToString() + ".txt"; // Формирование имени файла данных
            StreamWriter StWritcb; // Объект потока вывода
            int Icb = new int(), // Счётчик цикла
            Jcb = new int(); // Счётчик цикла
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            textBox1.Text = "1";
            textBox2.Text = "5";
            textBox3.Text = "10";
            textBox4.Text = "1";
            textBox5.Text = "5";
            textBox6.Text = "4";
        }

        private void DoWork(int tNN, double[] tXT, double[] tYT, double[,] tZT)
        {
            // Цикл для вычисления функции
            I = 0; // Обнуление счётчика по массиву аргументов X
            while (I < tNN) // Цикл по массиву аргументов X
            {
                J = 0; // Обнуление счётчика столбцов
                while (J < tNN) // Цикл по массиву аргументов Y
                {
                    tZT[I, J] = 4 * Math.Sin(tXT[I]) * Math.Cos(Math.Pow(tXT[I], 3))
                                - Math.Sin(12 * tYT[J]) * Math.Cos(Math.Pow(tXT[I], 3))
                                - 3 * Math.Sin(4 * tYT[J]) * Math.Cos(Math.Pow(tXT[I], 3));

                    if (progressBar1 != null && (progressBar1.Value + progressBar1.Step) < progressBar1.Maximum)
                    {
                        progressBar1.Value += progressBar1.Step;
                        progressBar1.Refresh();

                        FT = DateTime.Now;
                        ST = FT - BT;
                        label11.Text = ST.ToString();
                        label11.Refresh();
                    }
                    J++; // Наращивание счётчика цикла
                }
                I++; // Наращивание счётчика цикла
            }

            // Вывод результатов в файл
            FileN = "C://A_1.txt"; // Формирование имени файла данных

            using (StWrit = new StreamWriter(FileN, false, System.Text.Encoding.Default))
            {
                LineS = BT.Year.ToString() + "." + BT.Month.ToString() + "." + BT.Day.ToString() + ", " +
                        BT.Hour.ToString() + ":" + BT.Minute.ToString() + ":" + BT.Second.ToString() + ":" + BT.Millisecond.ToString();
                StWrit.WriteLine(LineS); // Вывод строки в поток вывода

                // Цикл вывода данных в файл
                LineS = "PXT: ";
                I = 0; // Обнуление счётчика по массиву аргументов X
                while (I < tNN) // Цикл до конца массива аргументов Х
                {
                    LineS += tXT[I].ToString() + "; "; // Занесение значения аргумента Х в строку
                    I++; // Наращивание счётчика
                }
                StWrit.WriteLine(LineS + "\n"); // Вывод строки в поток вывода

                // Цикл вывода в файл значений функции
                LineS = "PZT: "; // Инициализация строки
                I = 0; // Обнуление счётчика строк
                while (I < tNN) // Цикл до конца массива значений функции
                {
                    J = 0; // Обнуление счётчика столбцов
                    while (J < tNN) // Цикл до конца массива значений функции
                    {
                        LineS += tZT[I, J].ToString() + "; "; // Занесение значения функции в строку
                        J++; // Наращивание счётчика
                    } // Конец цикла while (J < tNN)
                    StWrit.WriteLine(LineS); // Вывод строки в поток вывода
                    LineS = " "; // Инициализация строки
                    I++; // Наращивание счётчика строк
                } // Конец цикла while (I < tNN)
            } // Поток закроется здесь из-за using блока
        }
    }
}
проверь код на ошибки