Использование другого фонового рабочего
Кажется, вам удобнее работать с фоновым работником. Вы можете использовать другой фоновый рабочий вместо потока здесь.
Итак, вместо создания потоков:
Thread t1 = new Thread(waitingMethod);
Вы можете создать фонового работника и запустить его здесь:
waitingWorker.RunWorkerAsync();
Затем вы можете обрабатывать события работника и использовать его флаг CancellationPending
для отмены потока:
private void waitingWorker_DoWork(object sender, DoWorkEventArgs e)
{
while (arrFibo[eingabe] == 0 && !waitingWorker.CancellationPending)
{
Thread.Sleep(500);
Console.WriteLine("Treadsleeping " + arrFibo[eingabe]);
}
}
private void waitingWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
labelErgebnis.Invoke(new Action(() => labelErgebnis.Text = arrFibo[eingabe].ToString()));
...
}
Использование потока
Если вы все еще хотите использовать поток, вам нужно будет самостоятельно установить флаг отмены. Вы можете применить одно из решений из предыдущего вопроса: Как отменить тему?
На данный момент _shouldStop
никогда не используется в вашем коде. Вы можете использовать его в качестве флага отмены. Используя код из @ ответа Фредрика Мёрка
bool _shouldStop = false;
private static object _shouldStopLock = new object();
//in buttonStartStop_Click2
lock (_shouldStopLock)
{
_shouldStop = false;
}
//in waiting method
bool localShouldStop = false;
while (arrFibo[eingabe] == 0 && !localShouldStop)
{
Thread.Sleep(500);
Console.WriteLine("Treadsleeping " + arrFibo[eingabe]);
lock (_shouldStopLock)
{
localShouldStop = _shouldStop;
}
}