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