1) αυτο που ειπα το εχω κανει γινεται αλλα δεν τρελαίνομαι κι ολας ως ιδεα.(λεω για το tranfsered byteς)
2) η κλαση my.network ειναι οτι ποιο "απλο" μπορω να σκεφτω (και ΔΕΝ κολαει το progress never απλα ειναι σαν dialogbox, wait to finish) τα εχει ολα ετοιμα και εσυ απλα συμπληρωνεις τα απαραιτητα "στοιχεια". τι ενοεις ποιο ευκολος τροπος δεν υπαρχει? τα progress bar δεν γινονται ως δια μαγειας θελει λιγο να αφιερώσεις χρόνο.
3)και σημαντικότερο παντα οταν κατεβαζεις μεγαλο ογκο θα σου "παγωνει" η εφαρμωγη-UI και δεν θα βλεπεις αλλαγές στο Interface, ο ποιο τσαπατσουλικος τροπος ειναι να κανεις συχνα me.validate αλλα ειναι πολυ τσαπατσουλικη λυση που θα απασχολει περισσοτερο την εφαρμογή σου και μπορεί να μην δουλεύει πάντα.
Γενικά η ποιο καλη-σωστη λυση ειναι νεο thread οπως ειπε και ο Παναγιωτης (κυρίως αμα θες να κατεβάζεις κατι ΠΟΛΥ μεγάλο και ταυτόχρονα θες να κανεις και άλλα πραγματα στην εφαρμωγή σου απο το να περημένεις), Αντιθέτως αν δεν θες να κάνεις κατι αλλο την ωρα που κατεβαίνει η εικονα τοτε κανε χρήση η της Network(). την webclient δεν την γνωριζω να σου πω την αληθεια αλλα θελω να δω τι κανει αυτο το client.DownloadFileAsync....
δεν εκατσα καν να μπω σε λεπτομερειες καθως λιγο λιγο μας δινεις τις πληροφοριες και ακομα δεν εχω καταλαβει 100% τι θες να κανεις.
για thread δες kai τον background worker ειναι ο ποιο γρηγορος και ευκολος τροπος να κανεις νεο thread να περνεις προοδο απο αυτο και να το περνας σε μια μπαρα.
απο κει και περα πρεπει να ψαχτεις και λιγο εσυ, παντος στο MSDN θα βρεις πολυ ευκολα παραδειγματα για τον BackgroundWorker or my.Network.
goodluck dude
p.s α κατι ακομα, αν πας σε thread λυση, οντος ΔΕΝ μπορεις να κανεις ετσι απλα Update ενα control μεσα απο ενα άλλο thread, δηλαδη στοn backgroundWorker sto Do_WORK δεν θα μπορουσες να πεις me.progressbar1.value=+1 παραδειγμα θα σκασει, ΑΛΛΑ εχω βρει μια π**σ***α (συγνώμη για την λεξη) πως στο event OnProgressChanged του BW Μπορεις να το κανεις χωρις προβλημα, αν θυμαμαι καλα....
p.s2 τελος βρηκα googlarontas και αυτο που κανει αυτο που θελει να σου γραψει αργοτερα και ο Παναγιωτης. Update controls from an other thread.
1
2
3
4
5
6
7
8
9
10
11
12
13
| private delegate void SetControlPropertyThreadSafeDelegate(Control control, string propertyName, object propertyValue);
public static void SetControlPropertyThreadSafe(Control control, string propertyName, object propertyValue)
{
if (control.InvokeRequired)
{
control.Invoke(new SetControlPropertyThreadSafeDelegate(SetControlPropertyThreadSafe), new object[] { control, propertyName, propertyValue });
}
else
{
control.GetType().InvokeMember(propertyName, BindingFlags.SetProperty, null, control, new object[] { propertyValue });
}
} |
κάλεσε την καπως ετσι:
1
2
3
| // thread-safe equivalent of
// myLabel.Text = status;
SetControlPropertyThreadSafe(myLabel, "Text", status); |
και αν γραφεις σε 3.5 μπορεις να ξαναγραψει το παραπανω ως extension method του Control class και να το καλεις ακομα ποιο ευκολα:
1
| myLabel.SetPropertyThreadSafe("Text", status); |
This Business Is Binary. You are a 1 or a 0. Alive or Dead.-