private async Task RefreshSolutionGlyphs()
{
await ThreadHelper.JoinableTaskFactory.RunAsync(VsTaskRunContext.UIThreadBackgroundPriority,
async delegate
{
// On caller's thread. Switch to main thread (if we're not already there).
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
// Now on UI thread via background priority.
await Task.Yield();
string[] rgpszFullPaths = new string[1];
rgpszFullPaths[0] = await GetSolutionFileName();
VsStateIcon[] rgsiGlyphs = new VsStateIcon[1];
uint[] rgdwSccStatus = new uint[1];
GetSccGlyph(1, rgpszFullPaths, rgsiGlyphs, rgdwSccStatus);
// Set the solution's glyph directly in the hierarchy
IVsHierarchy solHier = (IVsHierarchy)_sccProvider.GetService(typeof(SVsSolution));
solHier.SetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_StateIconIndex, rgsiGlyphs[0]);
});
}