Объясните подробно про работу с контролом из другого потока - 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 - форма, на которой расположены контролы
- //действия с контролами
- }));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д