У вас проблема с сочетанием условия гонки , а также с тем, что не-Gui-поток пытается изменить элемент интерфейса (я забыл правильный термин для этого).
В WPF вы используете шаблон Диспетчер для решения второй проблемы. В Winforms вы используете шаблон InvokeRequired .
Для борьбы с условиями гонки ... перед вызовом
_fbClient.GetAsync("/me");
Установите для NameTextBlock.Text значение «loading ...» или «fetching ...» или что-то в этом роде. Таким образом, когда асинхронный вызов завершается, он может заполнить текстовое поле правильными деталями. Вы также можете изменить стиль, чтобы сделать его более понятным для пользователя (например, серый при загрузке и ярко-красный при наличии результата). То, что вы делаете сейчас, предполагает, что к тому времени, когда вы установите текстовое поле для переменной name, событие (асинхронный вызов) уже завершено. Это может или не может иметь место!
Вообразите это более упрощенным способом. Два человека в гараже. Вы отправляете одного, чтобы открыть дверь гаража, другого, чтобы вести фургон в гараж. В вашем текущем коде парень, ведущий фургон, въезжает в гараж, не проверяя и не заботясь, открыта ли дверь гаража.
Следующая у вас проблема - Thread Safety . Переменная «name» может считываться и присваиваться одновременно, что означает, что операция чтения может работать с энергозависимой памятью и может вызвать ошибку / проблему, особенно в больших масштабах!
Я бы посоветовал вам взглянуть на Синхронизация потоков , чтобы получить лучшее представление.
Много информации, чтобы переварить там, извините. Надеюсь, это поможет, хотя!