AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein "Live-Suche" realisieren (hier: C#)
Thema durchsuchen
Ansicht
Themen-Optionen

"Live-Suche" realisieren (hier: C#)

Ein Thema von Matze · begonnen am 16. Dez 2009 · letzter Beitrag vom 16. Dez 2009
 
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: "Live-Suche" realisieren (hier: C#)

  Alt 16. Dez 2009, 17:43
Der erste Aufruf von Search ruft DoEvents auf, welches bei einem weiteren Tastendruck wiederum StartSearch aufruft. Das springt in den else-Teil und wartet auf das Ende des ersten Aufrufs. Auf das Ende einer Methode, die weiter unten auf dem Callstack liegt, kann man im gleichen Thread allerdings lange warten .

Code:
StartSearch()
-> DoEvents()
--> Search()
---> while (isSearching) ...
-> isSearching = false;
Mit etwas Umstrukturieren (genauer: Durch Iteratoren Coroutines simulieren... ) könnte man das Problem leicht lösen, aber wenn es deiner Anwendung nützt, würde ich direkt zu asynchroner Verarbeitung greifen.

Mit der TPL von .NET 4.0 gar kein Problem ... bis dahin sollte es aber auch so funktionieren:
Code:
object currentToken;

public void StartSearch()
{
   var token = new object();
   this.currentToken = token;
   ThreadPool.QueueUserWorkItem(delegate {
      var result = Search(...);
      // In den UI-Thread wechseln
      SynchronizationContext.Current.Send(delegate {
         if (token == currentToken) // Ergebnis verwerfen, wenn schon die nächste Anfrage gestartet wurde
            this.OnSearchCompleted(result);
      }, null);
   });
}
Ob das design-technisch optimal ist, will ich gerade lieber nicht beurteilen, denn über Design in Verbindung mit asynchronem Code musste ich mir bis jetzt noch nie Gedanken machen. Außerdem bin ich davon ausgegangen, dass deine Suchanfragen nicht so teuer sind, dass laufende Anfragen unbedingt abgebrochen werden müssen, wenn die nächste gestartet ist.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz