Только одно сообщение может выполняться одновременно в потоке пользовательского интерфейса, где и выполняется этот код.Привязка данных происходит с определенным приоритетом в отдельных сообщениях, поэтому вам нужно убедиться, что этот код:
object test = c.Content;
выполняется после того, как эти сообщения о привязке данных будут выполнены.Это можно сделать, поставив в очередь отдельное сообщение с тем же уровнем приоритета (или ниже), что и для привязки данных:
var c = new ContentControl();
c.SetBinding(ContentControl.ContentProperty, new Binding());
c.DataContext = "Test";
// this will execute after all other messages of higher priority have executed, and after already queued messages of the same priority have been executed
Dispatcher.BeginInvoke((ThreadStart)delegate
{
object test = c.Content;
}, System.Windows.Threading.DispatcherPriority.DataBind);