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

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

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

Здравствуйте. Не могли бы вы мне подробно и простым языком описать как производить правильное изменение свойств контрола из другого потока? У меня есть пример. Вот я запускаю поток и передаю в него параметры:
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;
Но как написано в этой теме (Ответы на 7 самых частых вопросов по WinForms) это не очень то хорошо. Пример ниже я не очень то понял Можете показать на моём примере как следует всё сделать правильно? И объясните как оно работает

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

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

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


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

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

15   голосов , оценка 4.267 из 5
Похожие ответы