Всем привет! Часто при разработки на winform приходится изобретать велосипед, так как некоторые контролы ведут себя не так как мы ожидаем. К примеру у нас есть некий поток, в котором происходит какие то вычисления или работа, поток может быть да же бесконечным циклом, это не имеет значения. Как же нам отправить значения в Label или TextBox из этого потока? Есть множество вариантов, но мы с вами используем Invoke, именно этот пример я использую в своих проектах.
Если вы видите подобную ошибку System.InvalidOperationException: «Недопустимая операция в нескольких потоках: попытка доступа к элементу управления ‘lbThread’ не из того потока, в котором он был создан.»

То воспользовавшись моим примером вы сможете от нее избавится.
Пример того как можно вывести информацию из другого потока в Label или TextBox на C#.
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp12
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void BtnStart_Click(object sender, EventArgs e)
{
new Thread(this.Work1).Start();
await Task.Run(Work2);
}
void Work1()
{
int count = 0;
while (true)
{
Thread.Sleep(500);
lbThread.Invoke((Action)delegate { lbThread.Text = count.ToString();});
count++;
}
}
void Work2()
{
int count = 0;
while (true)
{
Thread.Sleep(500);
txtBoxAsync.Invoke((Action)delegate { txtBoxAsync.Text = count.ToString(); });
count++;
}
}
}
}
Привожу полный пример кода приложения и то как он работает:

