WinForms (VS2015 / .NET 4.6)
В моем фоновом потоке
System.Threading.Tasks.Task.Run(() =>
{
...
_callback?.Progress("abcd");
...
});
я вызываю GUI (_callback), который реализует интерфейс вФорма класса. Здесь я изменяю значения текстового поля, индикатора выполнения и т. Д.
void IWorkerCallback.Log(string message)
{
_textBoxLog.AppendText($"{message}{Environment.NewLine}");
++_progressBar.Value;
.... etc...
}
И все работает отлично!
Если я порваюсь с отладчиком, я вижу, что функция Form.IWorkerCallback.Log()
выполняется в рабочем потокеcontext (в окне отладки Threads).
Везде сказано, что вы ДОЛЖНЫ изменять элементы GUI только в потоке GUI (там, где они созданы), в противном случае вы получите System.InvalidOperationException
исключение с cross-thread operation not valid.....
Но у меня все работает нормально.
Не могли бы вы объяснить, почему?
Спасибо