Нужно заставить поток включаться при нажатии клавиши. Windows Forms вообще плохо работает с таким событием как нажатие физической кнопки. А нужно сделать так чтобы он определял нажатие даже когда на форме нет фокуса, то бишь она свернута. Нужно чтобы цикл внутри потока работал пока зажата клавиша.
public: void Thread()
{
do {
//делаем чота
Sleep(300);
} while (checkBox1->Checked);
}
//тут мы зажимаем клавишу
{
Thread^ myThread2;
myThread2 = gcnew Thread(gcnew ThreadStart(this, &MyForm::Thread));
myThread2->Start();
}