@@ -43,9 +43,10 @@ public SearchClient(SearchConfig config)
4343 DetailedResults = new List < ImageResult > ( ) ;
4444 ContinueTasks = new List < Task > ( ) ;
4545
46- m_w = new AutoResetEvent ( false ) ;
46+ DirectResultsWaitHandle = new AutoResetEvent ( false ) ;
4747
4848 Reload ( ) ;
49+
4950 }
5051
5152 /// <summary>
@@ -96,8 +97,11 @@ public SearchClient(SearchConfig config)
9697
9798 public bool IsContinueComplete { get ; private set ; }
9899
99- public List < Task < SearchResult > > Tasks { get ; private set ; }
100- private List < Task > ContinueTasks { get ; }
100+ public List < Task < SearchResult > > Tasks { get ; private set ; }
101+
102+ private List < Task > ContinueTasks { get ; }
103+
104+ public WaitHandle DirectResultsWaitHandle { get ; private set ; }
101105
102106
103107 /// <summary>
@@ -127,10 +131,12 @@ public void Reset()
127131 FilteredResults . Clear ( ) ;
128132 DetailedResults . Clear ( ) ;
129133 ContinueTasks . Clear ( ) ;
130- PendingCount = 0 ;
134+ PendingCount = 0 ;
135+
131136 IsComplete = false ;
132137 IsContinueComplete = false ;
133- m_w = new AutoResetEvent ( false ) ;
138+
139+ DirectResultsWaitHandle = new AutoResetEvent ( false ) ;
134140
135141 Reload ( ) ;
136142 }
@@ -243,6 +249,12 @@ public async Task RunContinueAsync(CancellationToken? c = null)
243249
244250 ContinueTasks . Remove ( task ) ;
245251 IsContinueComplete = ! ContinueTasks . Any ( ) ;
252+
253+
254+ }
255+
256+ if ( ! DirectResultsWaitHandle . SafeWaitHandle . IsInvalid || ! DirectResultsWaitHandle . SafeWaitHandle . IsClosed ) {
257+ ( ( AutoResetEvent ) DirectResultsWaitHandle ) . Set ( ) ;
246258 }
247259 }
248260
@@ -251,37 +263,36 @@ private void GetResultContinueCallback(Task<SearchResult> task, object state)
251263 {
252264 var value = task . Result ;
253265
254- if ( value . IsSuccessful && value . IsNonPrimitive ) {
255-
266+ if ( ! value . IsSuccessful || ! value . IsNonPrimitive || value . Scanned ) {
267+ return ;
268+ }
256269
257- if ( ! value . Scanned ) {
258- // var task2 = value.FindDirectResultsAsync();
259- // task2.Wait();
260- // var result = task2.Result;
270+ // var task2 = value.FindDirectResultsAsync();
271+ // task2.Wait();
272+ // var result = task2.Result;
261273
262- var result = value . FindDirectResultsAsync ( ) ;
274+ var result = value . FindDirectResultsAsync ( ) ;
263275
264- if ( result . Any ( ) ) {
265- result = result /*.Where(x => x.Direct != null)*/
266- . ToList ( ) ;
276+ if ( result . Any ( ) ) {
277+ result = result /*.Where(x => x.Direct != null)*/
278+ . ToList ( ) ;
267279
268- DirectResults . AddRange ( result ) ;
280+ DirectResults . AddRange ( result ) ;
269281
270- var autoResetEvent = ( ( AutoResetEvent ) m_w ) ;
282+ value . Scanned = true ;
283+ var autoResetEvent = ( ( AutoResetEvent ) DirectResultsWaitHandle ) ;
284+
271285
272- if ( DirectResults . Count > 0 && ! autoResetEvent . SafeWaitHandle . IsClosed ) {
273- Debug . WriteLine ( "wait handle set" ) ;
274- autoResetEvent . Set ( ) ;
286+ if ( DirectResults . Count > 0 && ! DirectResultsWaitHandle . SafeWaitHandle . IsClosed /*|| ContinueTasks.Count==1*/ ) {
287+ Debug . WriteLine ( "wait handle set" ) ;
288+ autoResetEvent . Set ( ) ;
289+ }
275290
276- }
291+ DirectResultCompleted ? . Invoke ( null , EventArgs . Empty ) ;
277292
278- value . Scanned = true ;
293+ // if (result.Any()) { }
279294
280- ResultUpdated ? . Invoke ( null , EventArgs . Empty ) ;
281295
282- // if (result.Any()) { }
283- }
284- }
285296 }
286297 }
287298
@@ -358,7 +369,7 @@ public static BaseSearchEngine[] GetAllSearchEngines()
358369 /// <summary>
359370 /// Fires when a result has been updated with new information
360371 /// </summary>
361- public event EventHandler ResultUpdated ;
372+ public event EventHandler DirectResultCompleted ;
362373
363374 /// <summary>
364375 /// Fires when a result is returned (<see cref="RunSearchAsync" />).
@@ -375,8 +386,6 @@ public static BaseSearchEngine[] GetAllSearchEngines()
375386
376387 private static readonly SmartImageException SearchException = new ( "Search must be completed" ) ;
377388
378- public WaitHandle m_w ;
379-
380389
381390 public void Dispose ( )
382391 {
@@ -388,6 +397,10 @@ public void Dispose()
388397 result . Dispose ( ) ;
389398 }
390399
400+ if ( ! DirectResultsWaitHandle . SafeWaitHandle . IsClosed ) {
401+ DirectResultsWaitHandle . Dispose ( ) ;
402+
403+ }
391404 }
392405}
393406
0 commit comments