Остановка двух потоков по кнопке (.NET 6.0)

При нажатии кнопки "btn_Close" должна закрываться форма и открываться вторая. По итогу возникают две ситуации:

  1. Форма закрывается и открывается вторая после одного нажатия кнопки "btn_Close".
  2. Для закрытия формы иногда приходится нажимать на "btn_Close" два раза. Причем видно, что после первого нажатия останавливается поток "Thread_ModbusPull" (на форме видно, что останавливается опрос устройств).

Подскажите, пожалуйста, как исключить второй случай. Как я понимаю, я неправильно завершаю потоки.

public Thread? Thread_Examination;
public Thread? Thread_ModbusPull;


private void FormExamination_Load(Object sender, EventArgs e)
        {
            Thread_Examination = new Thread(Examination);
            Thread_Examination.Start();

            Thread_ModbusPull = new Thread(ModbusPulling);
            Thread_ModbusPull.Start();
        }


bool StartThread = true;

public void Examination()
        {
            while (StartThread == true)
            {

                switch (G.Step)
                {
                   // Тут пошаговое выполнение с редким использованием Thread.Sleep
                }

            }
        }


int ConStep = 0;
bool ValuesPulling = true;

public async void ModbusPulling()
        {
            while (ValuesPulling == true)
            {

                switch (ConStep)
                {
                   // Тут цикличный опрос устройства по Modbus TCP c использованием await Task.Delay
                }

            }
        }


private void btn_Close_Click(object sender, EventArgs e)
        {
                StartThread = false;
                ValuesPulling = false;

                G.Step = 0;
                ConStep = 0;


                if (!Thread_Examination.IsAlive && !Thread_ModbusPull.IsAlive)
                {
                    this.Close();
                }
        }


Ответы (0 шт):