@@ -82,7 +82,9 @@ protected override void Initialize()
8282 // Using JoinableTaskFactory from parent AsyncPackage. That way if VS shuts down before this
8383 // work is done, we won't risk crashing due to arbitrary work going on in background threads.
8484 var asyncPackage = ( AsyncPackage ) Package ;
85- viewModelTask = asyncPackage . JoinableTaskFactory . RunAsync ( ( ) => InitializeAsync ( asyncPackage ) ) ;
85+ JoinableTaskFactory = asyncPackage . JoinableTaskFactory ;
86+
87+ viewModelTask = JoinableTaskFactory . RunAsync ( ( ) => InitializeAsync ( asyncPackage ) ) ;
8688 }
8789
8890 public Task < IGitHubPaneViewModel > GetViewModelAsync ( ) => viewModelTask . JoinAsync ( ) ;
@@ -123,7 +125,7 @@ public override IVsSearchTask CreateSearch(uint dwCookie, IVsSearchQuery pSearch
123125
124126 if ( pane != null )
125127 {
126- return new SearchTask ( pane , dwCookie , pSearchQuery , pSearchCallback ) ;
128+ return new SearchTask ( JoinableTaskFactory , pane , dwCookie , pSearchQuery , pSearchCallback ) ;
127129 }
128130
129131 return null ;
@@ -175,37 +177,38 @@ void UpdateSearchHost(bool enabled, string query)
175177 {
176178 SearchHost . IsEnabled = enabled ;
177179
178- var searchString = SearchHost . SearchQuery ? . SearchString ;
179- if ( searchString ? . Trim ( ) != query ? . Trim ( ) )
180+ if ( SearchHost . SearchQuery ? . SearchString != query )
180181 {
181- // SearchAsync will crash the process if we send it a duplicate string.
182- // There is a SearchTrimsWhitespace setting that makes searched with leading or trailing
183- // white-space appear as duplicates. We compare the query with trimmed white-space to avoid this.
184- // https://github.com/github/VisualStudio/issues/1948
185182 SearchHost . SearchAsync ( query != null ? new SearchQuery ( query ) : null ) ;
186183 }
187184 }
188185 }
189186
190187 class SearchTask : VsSearchTask
191188 {
189+ readonly JoinableTaskFactory joinableTaskFactory ;
192190 readonly IGitHubPaneViewModel viewModel ;
193191
194192 public SearchTask (
193+ JoinableTaskFactory joinableTaskFactory ,
195194 IGitHubPaneViewModel viewModel ,
196195 uint dwCookie ,
197196 IVsSearchQuery pSearchQuery ,
198197 IVsSearchCallback pSearchCallback )
199198 : base ( dwCookie , pSearchQuery , pSearchCallback )
200199 {
200+ this . joinableTaskFactory = joinableTaskFactory ;
201201 this . viewModel = viewModel ;
202202 }
203203
204204 protected override void OnStartSearch ( )
205205 {
206- ThreadHelper . ThrowIfNotOnUIThread ( ) ;
206+ joinableTaskFactory . RunAsync ( async ( ) =>
207+ {
208+ await joinableTaskFactory . SwitchToMainThreadAsync ( ) ;
209+ viewModel . SearchQuery = SearchQuery . SearchString ;
210+ } ) ;
207211
208- viewModel . SearchQuery = SearchQuery . SearchString ;
209212 base . OnStartSearch ( ) ;
210213 }
211214
@@ -224,5 +227,7 @@ public SearchQuery(string query)
224227
225228 public uint GetTokens ( uint dwMaxTokens , IVsSearchToken [ ] rgpSearchTokens ) => 0 ;
226229 }
230+
231+ public JoinableTaskFactory JoinableTaskFactory { get ; private set ; }
227232 }
228233}
0 commit comments