Вместо того, чтобы сделать поток один раз и затем завершить его, возможно, используйте таймер формы для запуска фонового рабочего потока каждые 60000 миллисекунд?Тогда вам вообще не нужно засыпать фоновый поток.
Это означает, что вам нужно всего лишь остановить таймер, чтобы остановить появление новых фоновых задач, но, очевидно, это не остановит ни один активный в настоящее время фоновый поток.
Потоки очень редко следует прерывать, так как не существует какого-либо замечательного механизма, позволяющего сделать это с какой-либо согласованностью.Существуют различные средства защиты, такие как критические маркеры кода.Тем не менее, я думаю, что лучше проводить длительный опрос кода для отмены, тогда вы можете написать свою собственную логику для того, чтобы покинуть корабль и вернуться рано. Примечание , это не то же самое, что принудительное прерывание потока.
Я не думаю, что сон - это правильный выбор практически при любых обстоятельствах.
Например:
private bool _askedToCancel;
public void lonRunThread()
{
if (!_askedToCancel)
{
Operation1();
Invoke(new UpdateDelegate(updateState));
}
if (!_askedToCancel)
{
Operation2();
Invoke(new UpdateDelegate(updateState));
}
}
Кажется немного грязным, однако вы сохраняете очень хороший контроль над тем, какая логика выполняется, если вы отказываетесь принудительно прерывать потоки и вместо этого используете подход отмены.
Поскольку это не критичнокод, и поскольку действия над логическими значениями являются атомарными, вы должны быть в безопасности, если оба потока будут общаться с булом без какой-либо блокировки.И даже если это не по-настоящему безопасно, единственный результат - проделана дополнительная работа.