Επισκέπτης Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Όμως σε άλλες περιπτώσεις που δεν έχουμε απαίτηση για άμεση επιστροφή τιμής (δεν περνάει By reference) θέλουμε να πάει σε ένα σωρό. σε κάτι όπου θα το πάρει με τη σειρά του κάποιο νήμα, κάτι που δουλεύει ασύγχρονα. Αυτό είναι το ακριβώς αντίθετο του ασύγχρονου. Δεν ξέρω τι δουλεύεις αλλά αυτά που γράφεις δεν βγάζουν και πολύ νόημα.
Επισκέπτης Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Όπως το έγραψες το κατάλαβα. Λες "δεν έχουμε απαίτηση για άμεση επιστροφή τιμής" και παρακάτω "κάτι που δουλεύει ασύγχρονα". Κάτι που δουλεύει ασύγχρονα επιστρέφει τιμή άμεσα. Αυτό που γράφεις, με τον τρόπο που το γράφεις, δεν υφίσταται στο .NET.
M2000 Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Όχι δεν με κατάλαβες. Έχουμε ένα πράγμα που είναι η επιστροφή τιμής με αναφορά από διαδικασία ή συνάρτηση και ένα άλλο πράγμα η επιστροφή ροής εκτέλεσης. Στην ασύγχρονη κλήση η επιστροφή τιμής γίνεται σε άλλο χρόνο, όταν πχ κάνει το download, και σε ενημερώνει με γεγονός, πχ on_complete, ή μπορεί να έχει και άλλο πχ on_error. Η επιστροφή ροής γίνεται άμεσα, δηλαδή βάζεις το αντικείμενο να κατεβάσει και πας στην επόμενη εντολή. Δες όμως τι γίνεται όταν σου κρύβεται η διαδικασία με δύο εντολές που τις βλέπεις στο κώδικα συνεχόμενες.Πχ έχεις την var data να πάρει την εικόνα, και στην αμέσως επόμενη έχεις την data ως νέο stream να δίνει την εικόνα...πότε όμως; Απλά στη δεύτερη εντολή έβαλες το picturebox να περιμένει το stream να ολοκληρωθεί. Άρα μόνο η ροή επέστρεψε,ενώ τα δεδομένα, η εικόνα δεν έχει πάει. Εσύ λοιπόν βλέπεις το αντικείμενο data ως επιστροφή τιμής, αλλά δεν είναι τιμή. Θα έχει τιμή όταν παραδόσει. Προφανώς με το τρόπο του περάσματος αντικειμένου αντί για τιμή σε γλιτώνει από το να έβαζες το data WithEvents. Ξεχωριστά. Αλλά αυτό δεν σημαίνει ότι από μέσα δεν το έχει φτιάξει ώστε το picture box πήρε το data και του έδωσε τον εαυτό του ως εξυπηρετητή των γεγονότων του stream, το οποίο εν τέλει είναι interface για το data.
Επισκέπτης Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Ρωτάς πράγματα που σε οποιονδήποτε έχει γράψει δυο αράδες asynchronous κώδικα είναι ξεκάθαρα. Το «πότε» που ρωτάς το ελέγχει το await keyword. Προφανώς δεν το γνωρίζεις αυτό γιατί δεν έχεις γράψει ποτέ σου κάτι αντίστοιχο και γι αυτό θεωρητικολογείς με ακατάσχετα παραληρήματα. Με το μπαρδόν κιόλας, αλλά τα μισά από αυτά που γράφεις είναι ακατάληπτα. Δεν βγάζουν απολύτως κανένα νόημα, όπως η φράση "Αλλά αυτό δεν σημαίνει ότι από μέσα δεν το έχει φτιάξει ώστε το picture box πήρε το data και του έδωσε τον εαυτό του ως εξυπηρετητή των γεγονότων του stream, το οποίο εν τέλει είναι interface για το data." Τι σημαίνει αυτή η ανοησία; Τι θα πει interface για το data; Η λέξη interface στο .NET έχει μια πολύ συγκεκριμένη χρήση. Τι στο κέρατο είναι ο εξυπηρετητής γεγονότων του stream; Χρησιμοποιείς όρους που έχεις βγάλει από το κεφάλι σου και δεν ανταποκρίνονται στην πραγματικότητα με αποτέλεσμα να είναι αδύνατο για τον οποιονδήποτε να παρακολουθήσει τη σκέψη σου.
M2000 Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Ελληνικά γράφω. Όταν ολοκληρωθεί το download πώς θα ενημερωθεί το picturebox; Το αντικείμενο δηλαδή που κατεβάζει την εικόνα...δεν είναι αντικείμενο του picturebox. Το await keyword απλά κατευθύνει τον compiler το τι θα κάνει. Το ότι τα μισά που γράφω σου είναι ακατάληπτα, το αντιλαμβάνομαι τώρα. Πώς θα το ήξερα από πριν; Η λέξη interface έχει μια γενική έννοια και απλή έννοια στο προγραμματισμό αντικειμένων. Δηλώνει ένα σύνολο μεθόδων και ιδιοτήτων, που θα πρέπει να παρέχει ένα αντικείμενο για να λέμε ότι έχει το συγκεκριμένο interface. Ένα αντικείμενο μπορεί να έχει και άλλα interface. Όταν δηλώνεις το data ως stream δηλώνεις πως θα το χρησιμοποιείς με αυτό το interface. Κοίτα δεν προσπαθώ να σε πείσω. Μπορείς να πιστεύεις και να εξηγείς αυτά που βλέπεις όπως το κάνεις τώρα. Αν λειτουργεί αυτό το συνεχίζεις..
Επισκέπτης Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Για το μόνο πράγμα που μπορείς να με πείσεις, και το καταφέρνεις με μοναδική μαεστρία, είναι ότι δεν έχεις ιδέα για τι μιλάς. Αυτό, και το γεγονός ότι δεν έχεις αίσθηση του μέτρου. Σε ένα thread που έχουν δοθεί συγκεκριμένες απαντήσεις με κώδικα εσύ θεωρητικολογείς ακατάπαυστα χωρίς να προσφέρεις τίποτα χρήσιμο ή εφαρμόσιμο. Απλά έχεις μεγάλη ιδέα για τον εαυτό σου και νομίζεις ότι οι ανοησίες που λες έχουν μεγάλο ενδιαφέρον. Guess what, δεν έχουν!
M2000 Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Ας είναι...αλλά μην γενικεύεις! Για σένα δεν έχουν αξία! Ρίξε μια ματιά εδώ για δυναμικά interface σε Net. Εξηγεί πώς ένα αντικείμενο έχει τον ρόλο ενός interface. http://www.codeproject.com/Articles/87991/Dynamic-interfaces-in-any-NET-language
Επισκέπτης Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Τι σχέση έχουν τα δυναμικά interfaces με το αντικείμενο του thread; Ή απλά βρήκες εκεί κάτι προχωρημένο να προτείνεις για να κάνεις εντύπωση;
groot Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Μ2000, δεν βρέχει. Φιλικά. Υ.Γ. Άλλαξε πορεία. Επικεντρώσου σε αυτά που όντως έχεις να προσφέρεις και τα ξέρεις. Friendly tip.
defacer Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Το ότι τα μισά που γράφω σου είναι ακατάληπτα, το αντιλαμβάνομαι τώρα. Πώς θα το ήξερα από πριν; Το μισό φόρουμ σου έχει πει το ίδιο ακριβώς πράγμα. Λες να είναι θέμα του φόρουμ; Ρίξε μια ματιά εδώ για δυναμικά interface σε Net. Εξηγεί πώς ένα αντικείμενο έχει τον ρόλο ενός interface. http://www.codeproject.com/Articles/87991/Dynamic-interfaces-in-any-NET-language Δε νομίζω ότι έχεις την παραμικρή ιδέα τι λέει το άρθρο που έκανες link. Ιδιαίτερα εφόσον δεν ξέρεις ούτε .NET ούτε Go.
M2000 Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 @Groot, ok, αλλά να γράψω κάτι με ενδιαφέρον; Δεν με ενδιαφέρει να κάνω εντύπωση! Με ενδιαφέρει να γίνομαι κατανοητός όμως! @Elorant Άνοιξες θέμα για τα Interface. Αν κατάλαβα θεωρείς το Interface κάτι ειδικό στο Net. Αυτό που ήθελα να δεις είναι ότι η έννοια Interface μπορεί να παίξει όπως το δίνει η Net γλώσσα αλλά υπάρχουν τρόποι να το επεκτείνει κανείς, κρατώντας την ουσία ίδια. Αυτό που δείχνει το Link είναι ένας τρόπος (με περιορισμούς) όπου με πρόγραμμα, δυναμικά, να έχουμε πολλαπλά Interface. Δεν ξεφεύγει από την απλή έννοια. Μην κολλάς με αυτό που λέμε περιορισμό. Κάθε γλώσσα έχει περιορισμούς αλλά προγραμματιστικά αν θέλουμε τους ξεπερνάμε (με κόστος την ταχύτητα). Αυτό που ήθελα να δεις ήταν ότι έφτιαξε μια άλλη κλάση ως interface (ως ρόλο δηλαδή) Τώρα ας φύγουμε από το Inteface του τύπου, για αυτό όπως κατάλαβε ο καθένας. Πάμε στο Stream. Στο παράδειγμα με το Picturebox, μια κλάση, το stream παίζει το ρόλο του interface μεταξύ του PictureBox και του Data. Δηλαδή και ας μην είναι Interface τυπικά, παίζει τον ίδιο ρόλο! Δίνουμε data, που είναι String Byte Array και το PictureBox το βλέπει Image από το Image.Fromstream! @Defacer Κράτα τις παρατηρήσεις για τον εαυτό σου! Αν θες να δείξεις το λάθος μου, δώσε την εξήγησή σου! Δεν απαντάς λέγοντας "τι μας λες!". Έτσι κάνουν τα παιδιά που δεν καταλαβαίνουν τον δάσκαλο! Α! νομίζω ότι έλυσα το πρόβλημα του OP. Ενώ η παρακάτω είναι ασύγχρονη: var data = await wc.DownloadDataTaskAsync("http://www.insomnia.gr/uploads/profile/photo-thumb-216584.jpg?_r=1384551814"); Υποψιάζομαι ότι αυτή εδώ δεν είναι: this.pictureBox1.Image = Image.FromStream(new MemoryStream(data)); Η Image.FromStream() κολλάει! (εκτός και την δέχεται ως closure (late evaluation)...αυτό που σκεφτόμουν αρχικά δηλαδή)
groot Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Και τώρα elorant μπορείς να αρχίσεις το LSD. Ήδη ξέρεις πως θα νιώθεις, αφού το βιώνεις με αυτά που διαβάζεις.
M2000 Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Ενημερώθηκα από εδώ: http://weblogs.thinktecture.com/cnagel/2010/11/async-programming-with-net-and-c-vnext.html Όπως γράφει έχουν κάμει την ασύγχρονη μέθοδο να φαίνεται σύγχρονη με το await. Που σημαίνει ότι θα παραμένει κολλημένη η ροή στο Await ενώ όμως το Gui Θα τρέχει κανονικά! Άρα που είναι το ζήτημα; Ότι αυτό το await πρέπει να παίζει σε button ή κάτι παρόμοιο και όχι σε load event. Γιατί στο Load event...αν το κόψεις..δεν προχωράει για να παίξει το show...(ακριβώς αυτό έλειπε το DialogShow). Οπότε η λύση είναι να παίξει κάποιο timer το οποίο θα ξεκινήσει πριν το ShowDialog και όταν τρέξει μια φορά για θα κατεβάσει ότι θέλουμε. Το Timer κάνει ότι το button.click, αλλά χωρίς την δική μας παρέμβαση! για να το αποφύγει αυτό αρκεί να κάνει show πριν ολοκληρώσει το Load event (αυτό γίνεται στη Vb6)
defacer Δημοσ. 11 Μαρτίου 2016 Δημοσ. 11 Μαρτίου 2016 Κράτα τις παρατηρήσεις για τον εαυτό σου! Αν θες να δείξεις το λάθος μου, δώσε την εξήγησή σου! Δεν απαντάς λέγοντας "τι μας λες!". Έτσι κάνουν τα παιδιά που δεν καταλαβαίνουν τον δάσκαλο! Δάσκαλε, τρία πράγματα: 1. Ευχαριστώ για το ενδιαφέρον αλλά είμαι μεγάλο παιδί και τις παρατηρήσεις μου θα τις κάνω ο,τι νομίζω. 2. Για να δείξεις λάθος σε κάτι πρέπει το κάτι να έχει μια στοιχειώδη έστω επαφή με την πραγματικότητα. Διαφορετικά εγώ θα βάλω τα αβγά μου στη φωτιά για να γεννήσω δράκους και βρες μου εσύ πού είναι το λάθος σ' αυτή την ιδέα. 3. Όταν κανένα από τα παιδιά δεν καταλαβαίνει το δάσκαλο, σίγουρα υπάρχει πρόβλημα και σίγουρα δεν το έχουν τα παιδιά. Θα χαρούμε πολύ να έχουμε τη συμβολή σου σε θέματα που έχουν να κάνουν με VB6, αλλά προς το παρόν σε όλα τα υπόλοιπα θέματα που έχεις γράψει το πρώτο πράγμα που κάνεις (όχι εσκεμμένα) είναι να μας δώσεις να καταλάβουμε ότι δεν έχεις ιδέα για το αντικείμενο.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα