c # безопасно ли использовать this.Invoke? - PullRequest
0 голосов
/ 17 сентября 2018

Если я хочу обновить значение основного элемента управления пользовательского интерфейса в главном потоке из другого потока, используйте следующий код

1-я попытка - работает

Label1.Invoke((MethodInvoker)(()=> Label1.Text = "label"));  
button1.Invoke((MethodInvoker)(()=> button1.Text = "button")); 
textBox1.Invoke((MethodInvoker)(()=> textBox1.Text = "textBox"));  

2-я попытка - работает

this.Invoke((MethodInvoker)(()=> 
{
    Label1.Text = "label";  
    button1.Text = "button";
    textBox1.Text = "textBox";
}));  

Вторая попытка выглядит просто, потому что просто нужно написать "this.Invoke"
Вторая попытка доступа к элементам управления основного потока просто

Есть ли проблемы при использовании второй попытки "this.Invoke "?
Интересно, безопасна ли вторая попытка
Есть ли вероятность, что вторая попытка вызовет какие-либо проблемы?

1 Ответ

0 голосов
/ 17 сентября 2018

Второй подход безопасен, если все элементы управления связаны с одним и тем же потоком пользовательского интерфейса.Это почти всегда случай, но он не совсем имеет случай.

На практике вы почти наверняка будете знать, если ваш код - это создание разных элементов управления в разных потоках (потому что это очень необычная вещь).Если вы не знаете, что делаете, предположите, что это не так, и ваша вторая форма должна быть в порядке.

...