You are binding GridView asynchronously, that's why when you check the Column count it's still zero.
I suggest you bind it in the same thread or wait for async operation to finish.
As you requested, here is code example using EndInvoke
. Although if you put it like this all in one method - you will not gain anything from async calls.
// You don't need this, so i commented it out.
// it's excessive, you are going to overwrite this variable anyway
// this.radGridViewFiles.BeginInvoke((MethodInvoker)(() =>this.radGridViewFiles.DataSource = null));
var asyncRes = this.radGridViewFiles.BeginInvoke((MethodInvoker)(() => this.radGridViewFiles.DataSource = MyGlobals.ListOfItemsToControl.Concat(MyGlobals.lstNewItems.Where(i => i.sItemRequestStatus == "Add").ToList())));
// This method blocks until previous operation is done
// It's quite pointless. In real life you should call it somewhere from another thread
// While qui thread is unblocked and displaying progress bar or something like this.
this.radGridViewFiles.EndInvoke(asyncRes);
// at this point, binding is complete
if (radGridViewFiles.Columns.Count > 0)
{
RadMessageBox.Show(" This messagebox should show on startup but it does not - But if i call all this code again manually on a button press it does show ??? !!");
}