Для решения твоей проблемы тебе нужно
написать твой обработчик события загрузки фрейма как показано ниже и
убрать отовсюду вызов Invoke. Асинхронные методы на то и возвращают таски, чтобы в том числе можно было работать в UI потоке (основной код писать) и он не зависал.
Если на странице несколько фреймов, то этот обработчик вызовется, когда буде загружен каждый из них
private readonly string url = "https://kad.arbitr.ru/Card?number=";
private void OnWebBrowserFrameLoadEnded(object sender, FrameLoadEndEventArgs e)
{
Debug.WriteLine($"{nameof(OnWebBrowserFrameLoadEnded)}. " +
$"Frame.IsMain: {e.Frame.IsMain.ToString()}; e.Url: {e.Url};");
if (e.Frame.IsMain && e.Url.Contains(url))
{
Invoke((MethodInvoker)(async () =>
{
await UpdateData();
}));
}
}
Используй логирование, иначе ты так устанешь баги дебажить. Обычно логеры умеют писать в логи номер потока в том числе.
ChromiumWebBrowser.FrameLoadEnd