Вывод информации в Label и TextBox из потока C#

Всем привет! Часто при разработки на 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++;
            }
        }
    }
}

Привожу полный пример кода приложения и то как он работает:

 

Обновлено: 09.11.2021 — 19:52

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.