VB.net - Element auf Form zuerst laden (und anzeigen)

TheOnly1

RBTV | ngb | BMG
Registriert
14 Juli 2013
Beiträge
4.149
Ort
Zimmer 237
Hallo,

ich habe gerade ein (vermutlich völlig banales) Problem: Ich habe ein Windowsform, auf dem ich einen Threeview lade.
Je nach Umfang kann es etwas dauern, bis sich der Threeview aufgebaut hat (die Daten werden aus einer DB abgerufen und dann noch hin und her gerödelt, damit sie für den Threeview passend sind).
Dadurch sieht es mitunter so aus, als ob sich die ganze Anwendung verabschiedet hat, weil man dann für ein paar Sekunden nur so ein halb geladenes Fenster sieht und sonst nix erkannbares passiert.

So...nun hätte ich gerne sowas wie einen Hinweis über dem Threeview stehen ("Achtung - Das Laden kann einen Augenblick in Anspruch nehmen").
Normalerweise würde ich da einfach ein Label nehmen, nur das Problem ist, dass das Label immer erst geladen (und angezeigt) wird, wenn der Threeview (und damit das gesamte Form) fertig geladen ist. Das ist natürlich sinnlos.

Frage:
Wie kriege ich es hin, dass das Label zuerst geladen und angezeigt wird und das erst dann der Threeview geladen wird?

Wie gesagt, vermutlich banal, aber irgendwie stehe ich auf dem Schlauch.
 
Versteh die Frage nicht ganz. Wo wird den das Laden der Baumes aufgerufen, daß Du davor keine anderen Code aufrufen kannst?

Ansonsten würde ich die Daten für das Treeview gar nicht komplett laden. Immer erst laden, wenn ein Knoten geöffnet wird.

Grundsätzlich für viele Daten noch das Stichwort "Backroundworker" o.ä.
 


ja ein thread würde dir helfen.. aber wie sieht dein quellcode aus?

Initialisierung der Treeview (+ Ladevorgang)
dann Initialisierung des labels?
 
Falls dir die anderen Antworten nicht reichen, kannst du immer noch auf einen Splashscreen zurückgreifen. Das hab ich beispielsweise bei einer Anwendung gemacht, die sich mit einem Bluetooth-Gerät verbinden muss - da dies unter anderem länger dauern kann, genau wie bei dir, aktualisiere ich die Informationen auf dem Splashscreen und lasse die fertige Form erst anzeigen, sobald sie für die Interaktion mit dem User bereit ist.
 
  • Thread Starter Thread Starter
  • #6
Ah schon mal danke für die Antworten. Bin noch nicht dazu gekommen da groß was zu zu schreiben. Ich versuche heute mal den entsprechenden Codeabschnitt zu posten, muss den aber erst vorbereiten. Da sind super-geheime Sachen drin und so. :D
Da will ich erst mal drüber gucken vorher.

Ich habe aber auch schon eine Lösungs-Idee aufgrund der Antworten hier. Mal schaun...
 
Hatte so ein ähnliches Problem auch mal. Ein Datenbanktool, dass mit verschiedenen Tabs arbeiten konnte. Problem war hier auch, sobald in Tab 1 irgendwas passierte, konnte man nix mehr anklicken, was die Tabs natürlich sinnlos machte. Mit Threats konnte ich die Sache dann auch lösen. Wobei das schon fast ein bisschen "Over the top" ist, für eine reine Anzeigegeschichte von 2 Sekunden. Hier würde ich auch eher zum Splashscreen greifen.
 
Oder das auslesen über nen Timer starten...
bei onload() den Timer auf Enabled stellen, im Timer die durchläufe zählen und beim 2. Durchlauf (z.B. ein Durchlauf 1s) das auslesen starten sowie den Timer wieder auf Disabled stellen.

Das wäre eine primitive Variante ohne einen Splash-Screen zu nutzen und mit Threads zu hantieren - wobei die Threads natürlich schöner sind :)
 
Noch einmal der Hinweis, dass es reicht, nur die erste Ebene zu laden. Dann erübrigt sich alles andere meist schon.
 
wäre auch noch eine Möglichkeit. In Prä-DotNet Zeiten hätt ich vielleicht sogar DoEvents verwendet. (Bitte nicht schimpfen!)
 
Diese Spannung. Dass dieser ominöse Mister Burns nicht endlich mal hier schreibt, ob er sich nun letztendlich für einen Backroundworker oder einen Backroundworker entschieden hat.....Es zerreißt mich vor Neugier, wie er es gelöst hat! D:
 
  • Thread Starter Thread Starter
  • #14
Ruhig bleiben. :D
Mr. Burns war Mi-Fr geschäftlich unterwegs und hat noch gar nichts weiter unternommen in der Frage. Ich denke morgen werde ich dazu kommen, mich weiter damit zu beschäftigen. ;)
 
  • Thread Starter Thread Starter
  • #15
Zur Info: Ich habe mich für die Möglichkeit mit dem Backgroundworker entschieden.

Danke an alle, für die konstruktive Hilfe. :T
 
Zurück
Oben