private void ExecuteCallback(AsyncCallbackItem[] callbackItems) { foreach (var callbackItem in callbackItems) { Action <AsyncCallbackState> callback = callbackItem.ActionCallback; SynchronizationContext synchronizationContext = callbackItem.Context; object state = callbackItem.ActionCallbackData; Action finallyAction = callbackItem.FinallyAction; synchronizationContext.Post(o => uiContext.BeginLoadingAction(true), null); try { callback(new AsyncCallbackState(synchronizationContext, state)); } finally { synchronizationContext.Post(delegate { if (finallyAction != null) { finallyAction(); } uiContext.EndLoadingAction(); }, null); } } }