Не обновляется контрол при вызове из делегата

230
28 марта 2017, 10:17

Объявил делегат:

public delegate void SampleDelegate(string msg);    

вызываемый метод в классе формы:

...
   var sampleNotify = new SampleDelegate(NotifyMe);
   //передаю делегат
...
public void NotifyMe(string displayedString)
{
    Logger.Info("Зашли в NotifyMe с " + displayedString + "%");
    textBox1.Text = displayedString;           
    //Application.DoEvents(); - пробовал вызывать 
}

по логам показывает что в NotifyMe приходит нужная строка, но в textBox1 ничего не появляется. NetFramework 4.0

Answer 1

Убедитесь, что ваш делегат выполняется синхронно в UI-потоке вашей формы. В противном случае (асинхронном), доступ к контролу должен осуществляться через контекст синхронизации:

public void NotifyMe(string displayedString)
{
    Logger.Info("Зашли в NotifyMe с " + displayedString + "%");
    Invoke(new MethodInvoker(() =>
        {
          textBox1.Text = displayedString;  
        }));
}
READ ALSO
Как сделать замену частей страницы с помощью razor?

Как сделать замену частей страницы с помощью razor?

Как сделать замену(и добавление) частей страницы с помощью razor?

303
C# небезопасный буфер

C# небезопасный буфер

На https://msdnmicrosoft

282
interface cannot contain fields Что это значит?

interface cannot contain fields Что это значит?

Где здесь ошибка? Я не могу понять

326
Отложенное получение результата задачи

Отложенное получение результата задачи

С появлением async await все стало красивоВозьмем, например, такой кусочек кода

240