Hallo, ihr habt diesen Ablauf:
- multithreaded einfügen
- sobald das einfügen beendet ist, resizen
right?
wenn ihr eine codestelle habt, an der ihr definitiv sagen könnt, das einfügen ist abgeschlossen, dann legt eine Criticalsection an, die am anfang des einfügens angefordert und am ende releast wird.
Ein Thread wartet dann nur auf diese CriticalSection (indem er sie anfordert). Sobald er sie bekommt sendet er eine Windows-Message an den Hauptthread, indem als Reaktion auf diese Message das Sizing vorgenommen wird.
Kleine Zwischenfrage: Benutzt ihr bereits BeginUpdate und EndUpdate für die Listview/die subitems?
wenn ihr keine solche codestelle habt, dann braucht ihr eine generelle "listview-
access" critical section. Immer, wenn irgendjemand (sprich, irgendein thread) an die listview ranwill, muss er die critical section betreten. damit kann es eigentlich niemals zu zugriffsfehlern kommen.
Wenn ihr vor Beginn des Scans abschätzen könnt, wie viele Antworten ihr bekommt (bei entsprechender designmöglichkeit auch fehlschläge mit einberechenn und rückmelden!), kannst du da ja noch eine hürde einbauen, die erst nach entsprechender anzahl eingegangener ergebnisse (oder einem master timeout) mit dem sizing anfängt.
BTW:
Zitat:
(sowas wie ein Event "Drawfinished" - in die ListView schreiben ist ja eigentlich auch nichts anderes als ein Draw Event (wird einem erst beim Umfärben einzelner Einträge bewußt)
...eigentlich nur wenn die listview virtuell ist. oder wie genau meinst du das? das hinzufügen/verändern von listitems führt nur dann zum sofortigen redraw, wenn du dich nicht(!) in innerhalb eines Beginupdate/endupdate bereichs befindest, wie ich oben bereits angedeutet habe.