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