Visual Basi c: возможна ли остановка фонового потока из основного потока? - PullRequest
0 голосов
/ 05 мая 2020

Я пишу программу (в Microsoft Visual Basi c) для управления удаленным инструментом (столиком микроскопа с осью XY). Например, пользователь должен сначала откалибровать стол, нажав кнопку GUI. Для выполнения sh процесса калибровки требуется некоторое время, и я не хочу останавливать основной GUI, поэтому я выполняю вызов в фоновом потоке следующим образом:

Call New Thread(AddressOf CALIBRATE_STAGE) With {.IsBackground = True}.Start()

Итак, это работает хорошо, но мы можем представить, что по какой-то причине пользователю может потребоваться остановить калибровку до ее завершения. Команда halt должна исходить от кнопки на GUI, но не может быть запущена из основного потока, в противном случае возникнет ОГРОМНАЯ нестабильность. (По сути, программа cra sh, вероятно, из-за неправильного управления вспомогательным потоком. Единственное исправление - полностью перезагрузить компьютер.)

Я думаю, что мне нужно сделать что-то вроде этого псевдокода :

  1. Нажмите кнопку HALT на GUI
  2. Выполните команду STAGE HALT в том же подпотоке, где была запущена команда CALIBRATE_STAGE
  3. После того, как этап остановлен, должным образом прервать подпоток

Проблема в том, что я не знаю, как получить указанный подпоток c, на котором выполняется CALIBRATE_STAGE. Я знаю его ThreadID, но, учитывая это целое число, как мне запустить новый процесс в этом потоке? Есть у кого-нибудь идеи?

Или, может быть, кто-то знает, что эта моя идея не сработает, и есть лучшее решение?

...