Объясните подробно про работу с контролом из другого потока - C#
Формулировка задачи:
Здравствуйте.
Не могли бы вы мне подробно и простым языком описать как производить правильное изменение свойств контрола из другого потока?
У меня есть пример. Вот я запускаю поток и передаю в него параметры:
Сам поток:
Мой контрол меняет своё местоположение и движется к указанным координатам. Этот пример может работать если я отключаю проверку
Но как написано в этой теме (Ответы на 7 самых частых вопросов по WinForms) это не очень то хорошо. Пример ниже я не очень то понял Можете показать на моём примере как следует всё сделать правильно? И объясните как оно работает
private void GoHome() { var parametr = new BackgroundWorkerParams(); parametr.parX = 361; parametr.parY = 266; parametr.Destination = "Home"; backgroundWorker1.RunWorkerAsync(parametr); }
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { var parametr = (BackgroundWorkerParams)e.Argument; while (mob11.Location.X != parametr.parX || mob11.Location.Y != parametr.parY) { X.Text = "X= " + mob11.Location.X.ToString(); Y.Text = "Y= " + mob11.Location.Y.ToString(); if (mob11.Location.X < parametr.parX) mob11.Location = new Point(mob11.Location.X + 1, mob11.Location.Y); else if (mob11.Location.X > parametr.parX) mob11.Location = new Point(mob11.Location.X - 1, mob11.Location.Y); if (mob11.Location.Y < parametr.parY) mob11.Location = new Point(mob11.Location.X, mob11.Location.Y + 1); else if (mob11.Location.Y > parametr.parY) mob11.Location = new Point(mob11.Location.X, mob11.Location.Y - 1); Thread.Sleep(20); } }
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Решение задачи: «Объясните подробно про работу с контролом из другого потока»
textual
Листинг программы
//в потоке this.Invoke(new Action(() => { //this - форма, на которой расположены контролы //действия с контролами }));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д