@@ -82,7 +82,9 @@ protected override void Initialize()
82
82
// Using JoinableTaskFactory from parent AsyncPackage. That way if VS shuts down before this
83
83
// work is done, we won't risk crashing due to arbitrary work going on in background threads.
84
84
var asyncPackage = ( AsyncPackage ) Package ;
85
- viewModelTask = asyncPackage . JoinableTaskFactory . RunAsync ( ( ) => InitializeAsync ( asyncPackage ) ) ;
85
+ JoinableTaskFactory = asyncPackage . JoinableTaskFactory ;
86
+
87
+ viewModelTask = JoinableTaskFactory . RunAsync ( ( ) => InitializeAsync ( asyncPackage ) ) ;
86
88
}
87
89
88
90
public Task < IGitHubPaneViewModel > GetViewModelAsync ( ) => viewModelTask . JoinAsync ( ) ;
@@ -123,7 +125,7 @@ public override IVsSearchTask CreateSearch(uint dwCookie, IVsSearchQuery pSearch
123
125
124
126
if ( pane != null )
125
127
{
126
- return new SearchTask ( pane , dwCookie , pSearchQuery , pSearchCallback ) ;
128
+ return new SearchTask ( JoinableTaskFactory , pane , dwCookie , pSearchQuery , pSearchCallback ) ;
127
129
}
128
130
129
131
return null ;
@@ -175,37 +177,38 @@ void UpdateSearchHost(bool enabled, string query)
175
177
{
176
178
SearchHost . IsEnabled = enabled ;
177
179
178
- var searchString = SearchHost . SearchQuery ? . SearchString ;
179
- if ( searchString ? . Trim ( ) != query ? . Trim ( ) )
180
+ if ( SearchHost . SearchQuery ? . SearchString != query )
180
181
{
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
185
182
SearchHost . SearchAsync ( query != null ? new SearchQuery ( query ) : null ) ;
186
183
}
187
184
}
188
185
}
189
186
190
187
class SearchTask : VsSearchTask
191
188
{
189
+ readonly JoinableTaskFactory joinableTaskFactory ;
192
190
readonly IGitHubPaneViewModel viewModel ;
193
191
194
192
public SearchTask (
193
+ JoinableTaskFactory joinableTaskFactory ,
195
194
IGitHubPaneViewModel viewModel ,
196
195
uint dwCookie ,
197
196
IVsSearchQuery pSearchQuery ,
198
197
IVsSearchCallback pSearchCallback )
199
198
: base ( dwCookie , pSearchQuery , pSearchCallback )
200
199
{
200
+ this . joinableTaskFactory = joinableTaskFactory ;
201
201
this . viewModel = viewModel ;
202
202
}
203
203
204
204
protected override void OnStartSearch ( )
205
205
{
206
- ThreadHelper . ThrowIfNotOnUIThread ( ) ;
206
+ joinableTaskFactory . RunAsync ( async ( ) =>
207
+ {
208
+ await joinableTaskFactory . SwitchToMainThreadAsync ( ) ;
209
+ viewModel . SearchQuery = SearchQuery . SearchString ;
210
+ } ) ;
207
211
208
- viewModel . SearchQuery = SearchQuery . SearchString ;
209
212
base . OnStartSearch ( ) ;
210
213
}
211
214
@@ -224,5 +227,7 @@ public SearchQuery(string query)
224
227
225
228
public uint GetTokens ( uint dwMaxTokens , IVsSearchToken [ ] rgpSearchTokens ) => 0 ;
226
229
}
230
+
231
+ public JoinableTaskFactory JoinableTaskFactory { get ; private set ; }
227
232
}
228
233
}
0 commit comments