Объясните подробно про работу с контролом из другого потока - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Не могли бы вы мне подробно и простым языком описать как производить правильное изменение свойств контрола из другого потока? У меня есть пример. Вот я запускаю поток и передаю в него параметры:
Листинг программы
  1. private void GoHome()
  2. {
  3. var parametr = new BackgroundWorkerParams();
  4. parametr.parX = 361;
  5. parametr.parY = 266;
  6. parametr.Destination = "Home";
  7. backgroundWorker1.RunWorkerAsync(parametr);
  8. }
Сам поток:
Листинг программы
  1. private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  2. {
  3. var parametr = (BackgroundWorkerParams)e.Argument;
  4. while (mob11.Location.X != parametr.parX || mob11.Location.Y != parametr.parY)
  5. {
  6. X.Text = "X= " + mob11.Location.X.ToString();
  7. Y.Text = "Y= " + mob11.Location.Y.ToString();
  8. if (mob11.Location.X < parametr.parX)
  9. mob11.Location = new Point(mob11.Location.X + 1, mob11.Location.Y);
  10. else if (mob11.Location.X > parametr.parX)
  11. mob11.Location = new Point(mob11.Location.X - 1, mob11.Location.Y);
  12.  
  13. if (mob11.Location.Y < parametr.parY)
  14. mob11.Location = new Point(mob11.Location.X, mob11.Location.Y + 1);
  15. else if (mob11.Location.Y > parametr.parY)
  16. mob11.Location = new Point(mob11.Location.X, mob11.Location.Y - 1);
  17. Thread.Sleep(20);
  18. }
  19. }
Мой контрол меняет своё местоположение и движется к указанным координатам. Этот пример может работать если я отключаю проверку
Листинг программы
  1. System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Но как написано в этой теме (Ответы на 7 самых частых вопросов по WinForms) это не очень то хорошо. Пример ниже я не очень то понял Можете показать на моём примере как следует всё сделать правильно? И объясните как оно работает

Решение задачи: «Объясните подробно про работу с контролом из другого потока»

textual
Листинг программы
  1. //в потоке
  2. this.Invoke(new Action(() => { //this - форма, на которой расположены контролы
  3. //действия с контролами
  4. }));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.267 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы