1

Например есть клиент, который общается с сервером, приходят данные, которые нужно частично выводить на формы. Пробовал через Dispatcher, что-то всё равно ругается на STA. Может нужно какой бэграундворкер для апдейта формы?

Есть кэлбэк метод который вызывается когда сокет заканчивает приём данных, он вызывает функцию, в ней в зависимости от ответа меняется контрол, Dispatcher пробовал, не помогает, требует STA. Добавлял [STAThread] для кэлбэка сокета, ничего не помогает, есть идеи? Спасибо

orion_gm
  • 311
  • 3
  • Спасибо, посмотрю – orion_gm Apr 12 '16 at 12:03
  • вызываю из ReceiveSocketCallback
    Вызвано исключение: "System.InvalidOperationException" в    PresentationCore.dll
    System.InvalidOperationException: Вызывающим потоком должен быть STA, поскольку этого требуют большинство компонентов UI.
    
      AuthWindow.Instance.UpdateErrorBoxMessage(AuthMessages.ErrorMessages[2]);<code>
    public void UpdateErrorBoxMessage(string message)
        {
            _tbErrors.Dispatcher.Invoke(new Action(() =>
            {
                _tbErrors.Text = message;
            }));
        }
    
    – orion_gm Apr 12 '16 at 15:07

1 Answers1

1
private void AsyncHandler(object data)
{
    tickCount++;
    Action action = () => textBox1.Text = tickCount.ToString();
    if (InvokeRequired)
    {
        Invoke(action);
    }
    else
    {
        action();
    }
}

или посмотрите примеры асинхронного программирования c# с операторами async и await

Alexsandr Ter
  • 873
  • 5
  • 14