проверь код на ошибки:
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;

        public Form2()
        {
            InitializeComponent();
        }

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

        private void button1_Click(object sender, EventArgs e)
        {
            BT = DateTime.Now;

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

            if (NN <= 100)
            {
                progressBar1.Maximum = 100;
                progressBar1.Step = 1;
            }
            else
            {
                progressBar1.Maximum = NN;
                progressBar1.Step = NN / 100;
            }

            progressBar1.Minimum = 0;
            progressBar1.Value = 0;

            PXT = new double[NN];
            PYT = new double[NN];
            MinX = 0; // MinX needs to be set somewhere, but assuming 0 for now
            ShagX = (MaxX - MinX) / (NN - 1);
            PXT[0] = MinX;

            for (I = 1; I < NN; I++)
            {
                PXT[I] = PXT[I - 1] + ShagX;
                UpdateProgress();
            }

            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();
            }

            FileN = "C://A_1.txt";
            using (StWrit = new StreamWriter(FileN, false, Encoding.Default))
            {
                LineS = "PXT: "; 
                for (I = 0; I < NN; I++)
                {
                    LineS += PXT[I].ToString() + (I < NN - 1 ? "; " : ";\n");
                }
                StWrit.WriteLine(LineS);
            }

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

            FT = DateTime.Now;
            label10.Text = BT.ToString("HH: mm:ss: fff");
            label11.Text = FT.ToString("HH: mm:ss: fff");
            ST = FT - BT;
            label12.Text = $"{ ST.Hours:D2}:{ ST.Minutes:D2}:{ ST.Seconds:D2}:{ ST.Milliseconds:D3}";

            PZT = new double[NN, NN]; // Инициализация PZT перед вызовом функции
            tstat = new ThreadWithState(NN, MinX, MaxX, MinY, MaxY, new ThreadCallBack(TcallRes));
            // Создание объекта tstat класса ThreadWithState и передача в конструктор параметров(NN, MinX, MaxX, MinY,MaxY)
            thred = new Thread(new ThreadStart(tstat.ThreadDoWork));
            // Создание объекта thred класса Thread и запуск рабочей функции потока ThreadDoWork
            thred.Start(); // Запуск потока thred
            thred.Join(); // Приостановка главного потока программы и ожидание завершения потока thred
            thred.Abort(); // Завершение работы потока thred      
        }

        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, double[] cXT, double[] cYT, double[,] cZT)
        {
            DateTime BTcb = new DateTime(); // Время начала процесса
            string FileNcb = "", // Имя файла данных
            LineScb = ""; // Строка из файла данных
            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 блока
        }
    }
}