Остановка двух потоков по кнопке (.NET 6.0)
При нажатии кнопки "btn_Close" должна закрываться форма и открываться вторая. По итогу возникают две ситуации:
- Форма закрывается и открывается вторая после одного нажатия кнопки "btn_Close".
- Для закрытия формы иногда приходится нажимать на "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();
}
}