Нужно переключиться, по необходимости, в поток, которому принадлежит TextBox.
Для проверки используется функция CheckAccess(). Её нет в Intellisence (то есть в автодобавлении), но она нормально компилируется.
Если вы находитесь не в нужном потоке, то для вызова кода в нужном используется функция Invoke, от объекта Dispatcher того объекта, в потоке которого нужно выполнить код.
Код примерно такой (возможны синтаксические ошибки - нет под рукой студии):
void AddText(string message)
{
   if (!textbox.CheckAccess())
   {
       textbox.Dispatcher.Invoke(new Action<string>(AddText), message);
   }
   else
   {
       textbox.AppendText(message);
   }   
}