Обычно я решаю эту проблему - написать метод, который портит проблему с многопоточностью.Я склонен писать метод расширения:
public static class ControlExtensions
{
public static void Invoke(this Control control, Action action)
{
if (control.InvokeRequired)
control.Invoke(action);
else
action();
}
}
И использование выглядит так:
pdfViewer.Invoke(() => pdfViewer.Add(pdfDocument));
Большинство приложений WinForms имеют понятие «поток пользовательского интерфейса», но нетлюбой отдельный поток, на котором больше всего будет работать весь пользовательский интерфейс.Важно то, что некоторые операции над элементами управления могут выполняться только для потоков, которые были созданы в .Учитывая это, безопаснее всего попросить элемент управления вызвать ваше действие, чтобы гарантировать, что выполнение будет выполнено в потоке, в котором он был создан.