Я пытался заменить private на publi c на createThread, но все равно не работает.
Это изменит только видимость метода, а не работу method.
Поток выполняет код только один раз. Скорее всего, у вашего myMethod
есть oop, который не позволяет его завершить. Abort
способ завершения потоков не является изящным (см. Раздел Примечания документации). У вас уже есть условная переменная в вашем коде, myBool
, вы можете использовать ее внутри myMethod
, чтобы изящно выйти из l oop и позволить потоку завершить себя.
void myMethod() {
while (myBool && myLogic) { // if myBool is false, short-circuit and leave
// thread code here.
}
}
Это поможет нить знает, когда остановиться, выйдя из l oop. Да, и этот подход требует вашего первого Form1_KeyDown
метода, в котором вы устанавливаете значение myBool
.
Обратите внимание, что вам не нужно использовать while
, вы также можете использовать любую другую итеративную структуру, такую как do...while
или for
l oop. Логика c заканчивается sh l oop, как только myBool
становится ложным. Да, break
тоже будет работать. : -)
Теперь вернемся к вашему заявлению:
Я хочу иметь возможность отменить его
Если вы хотите, чтобы угроза была отменена правильно прочь, тогда мой подход не будет работать, так как он требует условной проверки перед выполнением l oop. Таким образом, вы можете ожидать задержку в несколько микросекунд - если вашему бизнесу требуется точность в микросекунды, тогда необходимо принудительное завершение потока с помощью Abort
.