44using System . Reactive . Linq ;
55using System . Runtime . InteropServices ;
66using System . Windows ;
7+ using System . Windows . Controls ;
8+ using GitHub . Helpers ;
79using GitHub . Extensions ;
810using GitHub . Factories ;
9- using GitHub . Models ;
1011using GitHub . Services ;
1112using GitHub . ViewModels ;
1213using GitHub . ViewModels . GitHubPane ;
1314using Microsoft . VisualStudio . Shell ;
1415using Microsoft . VisualStudio . Shell . Interop ;
16+ using Microsoft . VisualStudio . ComponentModelHost ;
1517using ReactiveUI ;
18+ using Task = System . Threading . Tasks . Task ;
19+ using IAsyncServiceProvider = Microsoft . VisualStudio . Shell . IAsyncServiceProvider ;
1620
1721namespace GitHub . VisualStudio . UI
1822{
@@ -34,16 +38,17 @@ public class GitHubPane : ToolWindowPane, IServiceProviderAware
3438 bool initialized = false ;
3539 IDisposable viewSubscription ;
3640 IGitHubPaneViewModel viewModel ;
41+ ContentControl contentControl ;
3742
38- FrameworkElement View
43+ public FrameworkElement View
3944 {
40- get { return Content as FrameworkElement ; }
45+ get { return contentControl . Content as FrameworkElement ; }
4146 set
4247 {
4348 viewSubscription ? . Dispose ( ) ;
4449 viewSubscription = null ;
4550
46- Content = value ;
51+ contentControl . Content = value ;
4752
4853 viewSubscription = value . WhenAnyValue ( x => x . DataContext )
4954 . SelectMany ( x =>
@@ -61,6 +66,7 @@ FrameworkElement View
6166 public GitHubPane ( ) : base ( null )
6267 {
6368 Caption = "GitHub" ;
69+ Content = contentControl = new ContentControl ( ) ;
6470
6571 BitmapImageMoniker = new Microsoft . VisualStudio . Imaging . Interop . ImageMoniker ( )
6672 {
@@ -83,17 +89,28 @@ public void Initialize(IServiceProvider serviceProvider)
8389 {
8490 if ( ! initialized )
8591 {
86- var provider = VisualStudio . Services . GitHubServiceProvider ;
87- var teServiceHolder = provider . GetService < ITeamExplorerServiceHolder > ( ) ;
88- teServiceHolder . ServiceProvider = serviceProvider ;
92+ InitializeAsync ( serviceProvider ) . Forget ( ) ;
93+ }
94+ }
8995
90- var factory = provider . GetService < IViewViewModelFactory > ( ) ;
91- viewModel = provider . ExportProvider . GetExportedValue < IGitHubPaneViewModel > ( ) ;
92- viewModel . InitializeAsync ( this ) . Forget ( ) ;
96+ async Task InitializeAsync ( IServiceProvider serviceProvider )
97+ {
98+ // Allow MEF to refresh its cache on a background thread so it isn't counted against us.
99+ var asyncServiceProvider = ( IAsyncServiceProvider ) GetService ( typeof ( SAsyncServiceProvider ) ) ;
100+ await asyncServiceProvider . GetServiceAsync ( typeof ( SComponentModel ) ) ;
93101
94- View = factory . CreateView < IGitHubPaneViewModel > ( ) ;
95- View . DataContext = viewModel ;
96- }
102+ await ThreadingHelper . SwitchToMainThreadAsync ( ) ;
103+
104+ var provider = VisualStudio . Services . GitHubServiceProvider ;
105+ var teServiceHolder = provider . GetService < ITeamExplorerServiceHolder > ( ) ;
106+ teServiceHolder . ServiceProvider = serviceProvider ;
107+
108+ var factory = provider . GetService < IViewViewModelFactory > ( ) ;
109+ viewModel = provider . ExportProvider . GetExportedValue < IGitHubPaneViewModel > ( ) ;
110+ viewModel . InitializeAsync ( this ) . Forget ( ) ;
111+
112+ View = factory . CreateView < IGitHubPaneViewModel > ( ) ;
113+ View . DataContext = viewModel ;
97114 }
98115
99116 [ SuppressMessage ( "Microsoft.Design" , "CA1061:DoNotHideBaseClassMethods" , Justification = "WTF CA, I'm overriding!" ) ]
0 commit comments