Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Επισκέπτης
Δημοσ.

Όμως σε άλλες περιπτώσεις που δεν έχουμε απαίτηση για άμεση επιστροφή τιμής (δεν περνάει By reference) θέλουμε να πάει σε ένα σωρό. σε κάτι όπου θα το πάρει με τη σειρά του κάποιο νήμα, κάτι που δουλεύει ασύγχρονα.

 

Αυτό είναι το ακριβώς αντίθετο του ασύγχρονου. Δεν ξέρω τι δουλεύεις αλλά αυτά που γράφεις δεν βγάζουν και πολύ νόημα.

Επισκέπτης
Δημοσ.

Όπως το έγραψες το κατάλαβα. Λες "δεν έχουμε απαίτηση για άμεση επιστροφή τιμής" και παρακάτω "κάτι που δουλεύει ασύγχρονα". Κάτι που δουλεύει ασύγχρονα επιστρέφει τιμή άμεσα. Αυτό που γράφεις, με τον τρόπο που το γράφεις, δεν υφίσταται στο .NET.

Δημοσ.

Όχι δεν με κατάλαβες. Έχουμε ένα πράγμα που είναι η επιστροφή τιμής με αναφορά από διαδικασία ή συνάρτηση και ένα άλλο πράγμα η επιστροφή ροής εκτέλεσης. Στην ασύγχρονη κλήση η επιστροφή τιμής γίνεται σε άλλο χρόνο, όταν πχ κάνει το download, και σε ενημερώνει με γεγονός, πχ on_complete, ή μπορεί να έχει και άλλο πχ on_error. Η επιστροφή ροής γίνεται άμεσα, δηλαδή βάζεις το αντικείμενο να κατεβάσει και πας στην επόμενη εντολή. Δες όμως τι γίνεται όταν σου κρύβεται η διαδικασία με δύο εντολές που τις βλέπεις στο κώδικα συνεχόμενες.Πχ έχεις την var data να πάρει την εικόνα, και στην αμέσως επόμενη έχεις την data ως νέο stream να δίνει την εικόνα...πότε όμως; Απλά στη δεύτερη εντολή έβαλες το picturebox να περιμένει το stream να ολοκληρωθεί. Άρα μόνο η ροή επέστρεψε,ενώ τα δεδομένα, η εικόνα δεν έχει πάει. Εσύ λοιπόν βλέπεις το αντικείμενο data ως επιστροφή τιμής, αλλά δεν είναι τιμή. Θα έχει τιμή όταν παραδόσει. Προφανώς με το τρόπο του περάσματος αντικειμένου αντί για τιμή σε γλιτώνει από το να έβαζες το data WithEvents. Ξεχωριστά. Αλλά αυτό δεν σημαίνει ότι από μέσα δεν το έχει φτιάξει ώστε το picture box πήρε το data και του έδωσε τον εαυτό του ως εξυπηρετητή των γεγονότων του stream, το οποίο εν τέλει είναι interface για το data.

Επισκέπτης
Δημοσ.

Ρωτάς πράγματα που σε οποιονδήποτε έχει γράψει δυο αράδες asynchronous κώδικα είναι ξεκάθαρα. Το «πότε» που ρωτάς το ελέγχει το await keyword. Προφανώς δεν το γνωρίζεις αυτό γιατί δεν έχεις γράψει ποτέ σου κάτι αντίστοιχο και γι αυτό θεωρητικολογείς με ακατάσχετα παραληρήματα. Με το μπαρδόν κιόλας, αλλά τα μισά από αυτά που γράφεις είναι ακατάληπτα. Δεν βγάζουν απολύτως κανένα νόημα, όπως η φράση "Αλλά αυτό δεν σημαίνει ότι από μέσα δεν το έχει φτιάξει ώστε το picture box πήρε το data και του έδωσε τον εαυτό του ως εξυπηρετητή των γεγονότων του stream, το οποίο εν τέλει είναι interface για το data." Τι σημαίνει αυτή η ανοησία; Τι θα πει interface για το data; Η λέξη interface στο .NET έχει μια πολύ συγκεκριμένη χρήση. Τι στο κέρατο είναι ο εξυπηρετητής γεγονότων του stream; Χρησιμοποιείς όρους που έχεις βγάλει από το κεφάλι σου και δεν ανταποκρίνονται στην πραγματικότητα με αποτέλεσμα να είναι αδύνατο για τον οποιονδήποτε να παρακολουθήσει τη σκέψη σου.

Δημοσ.

Ελληνικά γράφω. Όταν ολοκληρωθεί το download πώς θα ενημερωθεί το picturebox; Το αντικείμενο δηλαδή που κατεβάζει την εικόνα...δεν είναι αντικείμενο του picturebox.

Το await keyword απλά κατευθύνει τον compiler το τι θα κάνει. Το ότι τα μισά που γράφω σου είναι ακατάληπτα, το αντιλαμβάνομαι τώρα. Πώς θα το ήξερα από πριν;

Η λέξη interface έχει μια γενική έννοια και απλή έννοια στο προγραμματισμό αντικειμένων. Δηλώνει ένα σύνολο μεθόδων και ιδιοτήτων, που θα πρέπει να παρέχει ένα αντικείμενο για να λέμε ότι έχει το συγκεκριμένο interface. Ένα αντικείμενο μπορεί να έχει και άλλα interface. Όταν δηλώνεις το data ως stream δηλώνεις πως θα το χρησιμοποιείς με αυτό το interface.

Κοίτα δεν προσπαθώ να σε πείσω. Μπορείς να πιστεύεις και να εξηγείς αυτά που βλέπεις όπως το κάνεις τώρα. Αν λειτουργεί αυτό το συνεχίζεις..

Επισκέπτης
Δημοσ.

Για το μόνο πράγμα που μπορείς να με πείσεις, και το καταφέρνεις με μοναδική μαεστρία, είναι ότι δεν έχεις ιδέα για τι μιλάς. Αυτό, και το γεγονός ότι δεν έχεις αίσθηση του μέτρου. Σε ένα thread που έχουν δοθεί συγκεκριμένες απαντήσεις με κώδικα εσύ θεωρητικολογείς ακατάπαυστα χωρίς να προσφέρεις τίποτα χρήσιμο ή εφαρμόσιμο. Απλά έχεις μεγάλη ιδέα για τον εαυτό σου και νομίζεις ότι οι ανοησίες που λες έχουν μεγάλο ενδιαφέρον. Guess what, δεν έχουν!

Δημοσ.

Ας είναι...αλλά μην γενικεύεις! Για σένα δεν έχουν αξία!

 

 

Ρίξε μια ματιά εδώ για δυναμικά interface σε Net. Εξηγεί πώς ένα αντικείμενο έχει τον ρόλο ενός interface.

http://www.codeproject.com/Articles/87991/Dynamic-interfaces-in-any-NET-language

Επισκέπτης
Δημοσ.

Τι σχέση έχουν τα δυναμικά interfaces με το αντικείμενο του thread; Ή απλά βρήκες εκεί κάτι προχωρημένο να προτείνεις για να κάνεις εντύπωση;

Δημοσ.

Μ2000, δεν βρέχει.

 

Φιλικά.

 

Υ.Γ. Άλλαξε πορεία. Επικεντρώσου σε αυτά που όντως έχεις να προσφέρεις και τα ξέρεις. Friendly tip.

Δημοσ.

Το ότι τα μισά που γράφω σου είναι ακατάληπτα, το αντιλαμβάνομαι τώρα. Πώς θα το ήξερα από πριν;

 

Το μισό φόρουμ σου έχει πει το ίδιο ακριβώς πράγμα. Λες να είναι θέμα του φόρουμ;

 

Ρίξε μια ματιά εδώ για δυναμικά interface σε Net. Εξηγεί πώς ένα αντικείμενο έχει τον ρόλο ενός interface.

http://www.codeproject.com/Articles/87991/Dynamic-interfaces-in-any-NET-language

 

Δε νομίζω ότι έχεις την παραμικρή ιδέα τι λέει το άρθρο που έκανες link. Ιδιαίτερα εφόσον δεν ξέρεις ούτε .NET ούτε Go.

Δημοσ.
@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)...αυτό που σκεφτόμουν αρχικά δηλαδή)

Δημοσ.

Και τώρα elorant μπορείς να αρχίσεις το LSD. Ήδη ξέρεις πως θα νιώθεις, αφού το βιώνεις με αυτά που διαβάζεις.

Δημοσ.

Ενημερώθηκα από εδώ: 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)

Δημοσ.

Κράτα τις παρατηρήσεις για τον εαυτό σου! Αν θες να δείξεις το λάθος μου, δώσε την εξήγησή σου! Δεν απαντάς λέγοντας "τι μας λες!". Έτσι κάνουν τα παιδιά που δεν καταλαβαίνουν τον δάσκαλο!

Δάσκαλε, τρία πράγματα:

 

1. Ευχαριστώ για το ενδιαφέρον αλλά είμαι μεγάλο παιδί και τις παρατηρήσεις μου θα τις κάνω ο,τι νομίζω.

2. Για να δείξεις λάθος σε κάτι πρέπει το κάτι να έχει μια στοιχειώδη έστω επαφή με την πραγματικότητα. Διαφορετικά εγώ θα βάλω τα αβγά μου στη φωτιά για να γεννήσω δράκους και βρες μου εσύ πού είναι το λάθος σ' αυτή την ιδέα.

3. Όταν κανένα από τα παιδιά δεν καταλαβαίνει το δάσκαλο, σίγουρα υπάρχει πρόβλημα και σίγουρα δεν το έχουν τα παιδιά.

 

Θα χαρούμε πολύ να έχουμε τη συμβολή σου σε θέματα που έχουν να κάνουν με VB6, αλλά προς το παρόν σε όλα τα υπόλοιπα θέματα που έχεις γράψει το πρώτο πράγμα που κάνεις (όχι εσκεμμένα) είναι να μας δώσεις να καταλάβουμε ότι δεν έχεις ιδέα για το αντικείμενο.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...