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

 

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

Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

Îåêßíçóå áðü ôï ìÝëïò jimenez. Τελευταία δημοσίευση από το μέλος SakisT στις 08-10-2007, 21:57. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  02-10-2007, 18:57 35759

    Surprise [:O] Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

        Καλησπέρα,

        Έχω μια φόρμα και μία κλάση socket. Στην φορμα έχω ένα Label στο οποίο βάζω τα data Που έρχονται από το socket. Από τη μεριά του socket έχω δημιουργήσει ένα thread το οποίο τρέχει και συνεχώς λαμβάνει δεδομένα. Στην OnDataReceived έχω το εξής: Form1.Label1.Text = socketdata. Φυσικά δεν μου τα εμφανίζει. Έτσι διάβασα ότι πρέπει να φτιάξω και δεύτερο thread για το σετάρισμα του Label. Τι πρέπει να κάνω? Δηλαδή OnCreate της φόρμας ξεκινάω το thread της φόρμας. Ομοίως και του socket. Φυσικά με BeginInvoke και delegete δουλεύω. Μήπως υπάρχει έστω ένα μικρό παράδειγμα?

    Παιδιά βοηθήστε, είναι επείγον! Ευχαριστώ εξ'αρχής!

    Dimitris S.
    FIRST TEST THEN CODE....
  •  02-10-2007, 19:30 35760 σε απάντηση της 35759

    Απ: Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

    Δεν χρειάζεσαι νέο thread. Από αρχαιοτάτων χρόνων, απαγορεύεται ένα thread να πειράζει controls που έχουν δημιουργηθεί από άλλο. To .ΝΕΤ 1.1 δεν σε ειδοποιεί γι αυτό, αλλά η λειτουργία της εφαρμογής θα είναι ελαφρώς απροσδιόριστη. Το .NET 2.0 σε ειδοποιεί στο compile. Ρίξε μία ματιά στο How To: Make Thread-Safe Calls to Windows Forms Controls . Χονδρικά, δημιουργείς ένα delegate το οποίο πειράζει τα controls και καλείς την μέθοδο Invoke της φόρμας με παράμετρο το delegate. H Invoke θα φροντίσει να εκτελεστεί ο κώδικας του delegate στο UI thread.

    Αντί να δημιουργείς τα δικά σου thread θα μπορούσες να χρησιμοποιήσεις το BackgroundWorker component του .NET 2.0, το οποίο αναλαμβάνει να δημιουργήσει ένα thread στο background και χειρίζεται την επικοινωνία μεταξύ του background thread και του UI με το σωστό τρόπο. Το παραπάνω How To περιγράφει και τη λειτουργία του BackgroundWorker.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  02-10-2007, 19:33 35761 σε απάντηση της 35760

    Απ: Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

    Να ρωτήσω κάτι? Δημιούργησα ένα backroundworker.  Την  backroundworker1.RunWorkerAsync();  να την καλέσω  μέσα στην ondatareceived? Αυτο το backround thread ξεκινάει μόλις δημιουργείται?
    Dimitris S.
    FIRST TEST THEN CODE....
  •  02-10-2007, 19:36 35762 σε απάντηση της 35761

    Απ: Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

    Την κάλεσα και δεν μου εμφάνιζε πάλι τίποτα.
    Dimitris S.
    FIRST TEST THEN CODE....
  •  03-10-2007, 13:09 35777 σε απάντηση της 35762

    Απ: Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

    Το διαβασα.  Κοίτα έχω μία φορμα με Label. και μια class socket. Μέσα στην socket ξεκινάω thread για να λαμβάνω τα data. Αυτό που θέλω είναι να εμφανίζω τα data στο label της φόρμας. Δημιούργησα έναν backroundworker . Στην backgroundWorker1_RunWorkerCompleted έχω label1.Text = socketClient.socketdata.  backroundWorker1.RunAsync() Που την καλω? Μέσα στην ondata received του Socket class? Γιατι το εβαλα εκει και δεν κάνει τίποτα στο Label. Αλλά ούτε που μου κολλάει.
    Dimitris S.
    FIRST TEST THEN CODE....
  •  04-10-2007, 21:14 35838 σε απάντηση της 35777

    Απ: Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

    Παιδιά αν μπορείτε βοηθείστε. Έχω κολλήσει. Ειναι  πολυ σημαντικό project!
    Dimitris S.
    FIRST TEST THEN CODE....
  •  05-10-2007, 09:00 35852 σε απάντηση της 35838

    Απ: Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

    Τι περισσότερη βοήθεια από αυτό το walkthrough θα μπορούσαμε να δώσουμε; Το έκανες;


    Vir prudens non contra ventum mingit
  •  05-10-2007, 13:21 35867 σε απάντηση της 35852

    Απ: Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

    Τουλάχιστον ως προς την τρόπο σχεδίασης είμαι σωστός?Δηλαδή background worker για το setarisma του label και για την φόρμα του socket ένα thread είναι σωστό?
    Dimitris S.
    FIRST TEST THEN CODE....
  •  08-10-2007, 21:57 35989 σε απάντηση της 35759

    Απ: Βοήθεια! Πως μπορώ να εμφανίσω τα δεδομένα που μου έρχονται από ένα socket?

    Δημήτρης Σακελλαρίου:
        Φυσικά με BeginInvoke και delegete δουλεύω


    Συγνώμη αν κάτι δεν έχω καταλάβει καλά αλλά μιας και εσύ αναφέρεις κάτι για Delegate δεν κάνεις τη δουλειά σου με κάτι τέτοιο;

        Delegate Sub UpdateLabel(ByVal WithString As String)

        Private Sub UpdateLabel1(ByVal xString As String)
            If Me.Label1.InvokeRequired Then
                Dim Temp As New UpdateLabel(AddressOf UpdateLabel1)
                Me.Label1.Invoke(Temp, New Object() {xString})
            Else
                Me.Label1.Text = xString
            End If
        End Sub


    Οπότε στο OnDataReceived καλείς την  UpdateLabel1("Your Text Here"), όπου βέβαια αντί για "Your Text Here" βάζεις το Text που θέλεις να βάλεις στο Label σου.


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