vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Warten auf Threads unterschiedlicher Laufzeit schlägt fehl 
Autor: Bitscheucher
Datum: 11.06.09 21:38

Hallo Dave,

schon mal vielen Dank für die schnelle und weiterhelfende Antwort. Ganz klar: Mal wieder viel zu kompliziert gedacht. Ein einfacher, mittels "OR" verbundener Abfragestring tuts auch.

Aber, aus Interesse und zum lernen: Was ist in dem von mir gezeigten Thread-Problem falsch gelaufen?

Bitschieber
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Warten auf Threads unterschiedlicher Laufzeit schlägt fehl 
Autor: Bitscheucher
Datum: 11.06.09 20:34

Hallo Forum,

leider komme ich mal wieder bei einem Problem trotz MSDN-Lektüre, Google und Formumssuche nicht weiter:

Als Ergebnis einer Abfrage aus einer SQLite-DB erhalte ich zu einem Song bis zu bis zu vier verschiedene Track-IDs zurück (das ist dann der Fall, wenn der Song vom Künstler mehrfach veröffentlicht wurde). In einer anderen Tabelle dieser SQLite-DB sind die zugehörigen Alben hinterlegt.
Ich könnte nun zu jeder Track-ID der Reihe nach das jeweilige Album suchen (aber dann würden sich die Suchzeiten addieren, dauert bis zu 13sec) oder aber in der Alben-Tabelle parallel suchen lassen. Das geht ja, weil Sqlite nur beim Schreiben die ganze DB locked.
Also vier BackGroundworker eingerichtet, mit je einer eigenen SQLite-Connection und suchen lassen - läuft (dauert dann ca. 3,4sec), nur die Worker arbeiten unterschiedlich lange und das Gesamtergebnis soll auf einmal angezeigt werden.

Deshalb habe ich in der MSDN nach Möglichkeiten gesucht, dass der aufrufende Thread solange wartet, bis die Arbeitsthreads fertig sind, dann das Ergebnis der Arbeitsthreads entgegennimmt und anzeigt. Ich bin auf folgendes Beispiel gestoßen:
http://msdn.microsoft.com/de-de/library/system.threading.autoresetevent(VS.80).aspx

Also neues Projekt eingerichtet, die Klasse "calculate" aus dem Beispiel erstellt und in Form1_Load folgendes eingefügt:
  Dim calc As New Calculate()
  Dim Erg As String = calc.Result(123).ToString
  MessageBox.Show(Erg)
In der Zeile "WaitHandle.WaitAll(autoEvents)" erhalte ich die Fehlermeldung :
"WaitAll für mehrere Handles in einem STA-Thread wird nicht unterstützt."

Durch Nachlesen habe ich herausgefunden, dass der aufrufende UI-Thread als SingleThread (STA) läuft, WaitAll nicht unerstützt (weil evtl. sonst die GUI hängenbleibt, WaitAny wird ja unterstützt) und dass neue Threads als ApartmentState.MTA initialisiert werden (steht hier:http://msdn.microsoft.com/de-de/library/system.threading.thread.setapartmentstate.aspx).

Nun meine Frage: Kann ich dem UI-Thread mitteilen, dass er ein MTA-Thread ist, oder wie muss ich das Beispiel aus der MSDN umschreiben (die Fehlermeldung kommt ja aufrund des autoEvents-Arrays, das im Teil New() eingerichtet wird) oder muss ich meine Idee, auf das Ende der unteschiedlich lang laufenden Threads zu warten, begraben?

Für Hilfe bin ich schon mal dankbar

Bitscheucher

Beitrag wurde zuletzt am 11.06.09 um 20:52:22 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Warten auf Threads unterschiedlicher Laufzeit schlägt fehl 
Autor: ModeratorDaveS (Moderator)
Datum: 11.06.09 21:10

Und warum machst du nicht wie üblich eine Abfrage für alle vier Sätze? Wäre wesentlich schneller und einfacher und braucht nur eine Verbindung.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Warten auf Threads unterschiedlicher Laufzeit schlägt fehl 
Autor: ModeratorDaveS (Moderator)
Datum: 11.06.09 22:09

Where x In (wert1, wert2, ...) wäre da auch einfacher. Um Threads zu synchronisieren verwendet man Join() (wenn der Thread beendet wird) oder Synchronisierungsobjekte wie ManualResetEvent.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Warten auf Threads unterschiedlicher Laufzeit schlägt fehl 
Autor: Bitscheucher
Datum: 11.06.09 22:16

Hallo Dave,

danke für die Antworten - wieder was dazu gelernt.

Bitscheucher
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel