Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Treeview & Background Worker

Îåêßíçóå áðü ôï ìÝëïò xenophon. Τελευταία δημοσίευση από το μέλος micfarmakis στις 26-11-2007, 17:23. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-11-2007, 16:50 37727

    Treeview & Background Worker

    καταρχήν έχω με μια εφαρμογή με 1 treeview 1 background worker και τέλος ενα κουμπι
    πατώντας το κουμπί βάζω το background worker να λειτουργεί και σε αυτό εχω τον εξης κώδικα

    Dim i As Integer = 0
    Do Until i = 3 'My.Computer.Registry.ClassesRoot().SubKeyCount
    TreeView1.Nodes(0).Nodes.Add(My.Computer.Registry.ClassesRoot.GetSubKeyNames(i))
    i = i + 1
    Loop


    δλδ με αυτο διαβάζει τα 3 πρωτα key της registy στο ClassesRoot (αλλα δεν εχει σημασία αυτο)
    μετα εκει που ειναι να βαλει το καθε κλειδί στο treeview μου βγάζει το εξης error στο debug

    "Action being performed on this control is being called from the wrong thread. Marshal to the correct thread using Control.Invoke or Control.BeginInvoke to perform this action"

    δεν εχω καταλάβει τι πρεπει να κανω , απλα θελω οσο κανει loop να προσθέτει στο treeview τα nodes.
    τι πρεπει να κανω ;


  •  26-11-2007, 17:19 37729 σε απάντηση της 37727

    Απ: Treeview & Background Worker

    Θα πρέπει να δώσεις λίγη προσοχή στο documentation του BackgroundWorker control. Ο σκοπός του δεν είναι μόνο να τρέξει κάτι σε άλλο thread αλλά να αναλάβει και τη σωστή επικοινωνία μεταξύ του άλλου thread και του UI σου. Εξ από ανέκαθεν, απαγορεύεται κώδικας από κάποιο background thread να πειράξει ένα control που δημιουργήθηκε από το UI thread. Το BackgroundWorker component λύνει αυτό το πρόβλημα δίνοντας σου ένα event το οποίο πρέπει να σηκώσεις μέσα στο loop σου περνώντας μία τιμή που δείχνει την πρόοδο του thread σου. Μετά, στη φόρμα σου θα προσθέσεις ένα handler για το event αυτό ο οποίος θα παίρνει την τιμή και θα την εμφανίζει στο treeview σου. Κοίτα τα παραδείγματα του documentation καθώς τα περιγράφουν όλα αυτά.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  26-11-2007, 17:23 37731 σε απάντηση της 37727

    Απ: Treeview & Background Worker

    Αλλαγές στο UI ειναι δυνατές μόνο από το main thread της εφαρμογής σου. Χρησιμοποίησε το progressReport event του worker για να "γεμίζεις"¨το tree. H doWork ΔΕΝ μπορεί καθώς τρέχει στο thread tou worker. Για περισσότερες λεπτομέρειες αν θέλεις θα προσπαθήσω αργότερα

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems