Как запустить тот же фоновый рабочий и остановить его внутри цикла в C#

Я выполнил генетический алгоритм, который циклически повторяется 10 раз, когда каждый раз, когда я вызываю функцию "FitnessFunction", я использую фонового работника для перемещения объекта в топологии, и как только он достигает определенной точки, я отменяю этого фонового работника и возвращаюсь к "". Genetic_Algorithm"функция...

К сожалению, я получил следующую ошибку:

Cross-thread operation not valid: Control 'topology' accessed from a thread other than the thread it was created on...

Что я пробовал:

Запускайте фоновый рабочий каждый раз, когда я вызываю функцию "FitnessFunction", которая отвечает за ее остановку при определенных условиях.

1 ответ

WinForms запрещает доступ к элементам управления из других потоков, кроме основного интерфейса.

использование Invoke(..) метод формы или использования SynchronizationContext учебный класс.

private SynchronizationContext context;

MyForm()
{
  InitializeComponents();
  context = SynchronizationContext.Current;
}

///// somewhere in another thread
context.Post(myCallbackInUIThread, null) // you can use Send for synchronous call
Другие вопросы по тегам