Я пишу программу (в Microsoft Visual Basi c) для управления удаленным инструментом (столиком микроскопа с осью XY). Например, пользователь должен сначала откалибровать стол, нажав кнопку GUI. Для выполнения sh процесса калибровки требуется некоторое время, и я не хочу останавливать основной GUI, поэтому я выполняю вызов в фоновом потоке следующим образом:
Call New Thread(AddressOf CALIBRATE_STAGE) With {.IsBackground = True}.Start()
Итак, это работает хорошо, но мы можем представить, что по какой-то причине пользователю может потребоваться остановить калибровку до ее завершения. Команда halt должна исходить от кнопки на GUI, но не может быть запущена из основного потока, в противном случае возникнет ОГРОМНАЯ нестабильность. (По сути, программа cra sh, вероятно, из-за неправильного управления вспомогательным потоком. Единственное исправление - полностью перезагрузить компьютер.)
Я думаю, что мне нужно сделать что-то вроде этого псевдокода :
- Нажмите кнопку HALT на GUI
- Выполните команду STAGE HALT в том же подпотоке, где была запущена команда CALIBRATE_STAGE
- После того, как этап остановлен, должным образом прервать подпоток
Проблема в том, что я не знаю, как получить указанный подпоток c, на котором выполняется CALIBRATE_STAGE. Я знаю его ThreadID, но, учитывая это целое число, как мне запустить новый процесс в этом потоке? Есть у кого-нибудь идеи?
Или, может быть, кто-то знает, что эта моя идея не сработает, и есть лучшее решение?