Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про C#: threading, winforms, synchronization

Как в Windows Forms показать сообщение из фонового потока (синхронизация с UI-потоком)?

Проверяет умение работать с потоками в UI-приложениях.

Короткий ответ

Используйте:

  1. Control.Invoke для синхронного вызова

  2. Control.BeginInvoke для асинхронного

  3. SynchronizationContext

Длинный ответ

Способы синхронизации:

  1. Через Invoke:

    void UpdateText(string text)
    {
        if (label1.InvokeRequired)
        {
            label1.Invoke(() => label1.Text = text);
        }
        else
        {
            label1.Text = text;
        }
    }
  2. Через SynchronizationContext:

    var uiContext = SynchronizationContext.Current;
    Task.Run(() => 
    {
        uiContext.Post(_ => MessageBox.Show("Done!"), null);
    });

Уровень

  • Рейтинг:

    1

  • Сложность:

    8

Навыки

  • C#

    C#

Ключевые слова

#threading

#winforms

#synchronization

Подпишись на C# Developer в телеграм