@@ -43,6 +43,7 @@ public SearchClient(SearchConfig config)
4343 DetailedResults = new List < ImageResult > ( ) ;
4444 ContinueTasks = new List < Task > ( ) ;
4545
46+ m_w = new AutoResetEvent ( false ) ;
4647
4748 Reload ( ) ;
4849 }
@@ -95,7 +96,8 @@ public SearchClient(SearchConfig config)
9596
9697 public bool IsContinueComplete { get ; private set ; }
9798
98- private List < Task > ContinueTasks { get ; }
99+ public List < Task < SearchResult > > Tasks { get ; private set ; }
100+ private List < Task > ContinueTasks { get ; }
99101
100102
101103 /// <summary>
@@ -128,6 +130,7 @@ public void Reset()
128130 PendingCount = 0 ;
129131 IsComplete = false ;
130132 IsContinueComplete = false ;
133+ m_w = new AutoResetEvent ( false ) ;
131134
132135 Reload ( ) ;
133136 }
@@ -141,6 +144,7 @@ public async Task RunSearchAsync(CancellationToken? cts = null)
141144 Reset ( ) ;
142145 }
143146
147+
144148 cts ??= CancellationToken . None ;
145149
146150 Tasks = new List < Task < SearchResult > > ( Engines . Select ( engine =>
@@ -230,9 +234,10 @@ public async Task RunContinueAsync(CancellationToken? c = null)
230234 {
231235
232236 IsContinueComplete = false ;
233- c ??= CancellationToken . None ;
234237
235- while ( ! IsContinueComplete && ! c . Value . IsCancellationRequested ) {
238+ c ??= CancellationToken . None ;
239+
240+ while ( ! IsContinueComplete && ! c . Value . IsCancellationRequested ) {
236241 var task = await Task . WhenAny ( ContinueTasks ) ;
237242 await task ;
238243
@@ -241,26 +246,6 @@ public async Task RunContinueAsync(CancellationToken? c = null)
241246 }
242247 }
243248
244- public WaitHandle GetWaitHandle ( )
245- {
246- // ReSharper disable PossibleNullReferenceException
247-
248- WaitHandle w = new AutoResetEvent ( false ) ;
249-
250- ThreadPool . QueueUserWorkItem ( ( state ) =>
251- {
252- //todo
253- while ( ! DirectResults . Any ( ) ) { }
254-
255- var resetEvent = ( AutoResetEvent ) state ;
256- resetEvent . Set ( ) ;
257-
258- } , w ) ;
259-
260- return w ;
261-
262- // ReSharper restore PossibleNullReferenceException
263- }
264249
265250 private void GetResultContinueCallback ( Task < SearchResult > task , object state )
266251 {
@@ -270,21 +255,31 @@ private void GetResultContinueCallback(Task<SearchResult> task, object state)
270255
271256
272257 if ( ! value . Scanned ) {
273- var task2 = value . FindDirectResultsAsync ( ) ;
274- task2 . Wait ( ) ;
275- var result = task2 . Result ;
258+ // var task2 = value.FindDirectResultsAsync();
259+ // task2.Wait();
260+ // var result = task2.Result;
261+
262+ var result = value . FindDirectResultsAsync ( ) ;
276263
264+ if ( result . Any ( ) ) {
265+ result = result /*.Where(x => x.Direct != null)*/
266+ . ToList ( ) ;
277267
278- if ( result != null && result . Any ( ) ) {
279- result = result . Where ( x => x . Direct != null ) . ToList ( ) ;
268+ DirectResults . AddRange ( result ) ;
280269
281- if ( result . Any ( ) ) {
282- DirectResults . AddRange ( result ) ;
283- value . Scanned = true ;
270+ var autoResetEvent = ( ( AutoResetEvent ) m_w ) ;
284271
285- ResultUpdated ? . Invoke ( null , EventArgs . Empty ) ;
272+ if ( DirectResults . Count > 0 && ! autoResetEvent . SafeWaitHandle . IsClosed ) {
273+ Debug . WriteLine ( "wait handle set" ) ;
274+ autoResetEvent . Set ( ) ;
286275
287276 }
277+
278+ value . Scanned = true ;
279+
280+ ResultUpdated ? . Invoke ( null , EventArgs . Empty ) ;
281+
282+ // if (result.Any()) { }
288283 }
289284 }
290285 }
@@ -380,7 +375,7 @@ public static BaseSearchEngine[] GetAllSearchEngines()
380375
381376 private static readonly SmartImageException SearchException = new ( "Search must be completed" ) ;
382377
383- public List < Task < SearchResult > > Tasks { get ; private set ; }
378+ public WaitHandle m_w ;
384379
385380
386381 public void Dispose ( )
0 commit comments