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

 

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

Διπλή εκτέλεση Event

Îåêßíçóå áðü ôï ìÝëïò SakisT. Τελευταία δημοσίευση από το μέλος imanos στις 21-09-2009, 11:40. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  01-09-2009, 17:03 53364

    Διπλή εκτέλεση Event

    Καλησπέρα σε όλους και καλό υπόλοιπο διακοπών!!Smile

    Μπαίνω αμέσως στο θέμα μου.

    Έχω μία εφαρμογή σε vb.Net  η οποία μου δημιουργεί ένα μάλλον περίεργο πρόβλημα.
    Έχω ένα κομμάτι κώδικα που πάνω κάτω λέει τα εξής:

        Private Sub cmdRegister_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRegister.Click
            CompleteArrival()
        End Sub

    Private Sub CompleteArrival()
           Try
          .................
                ExecuteQueryOnSQLServer2008ExpressEdition(QueryString_1)
                ExecuteQueryOnSQLServer2008ExpressEdition(QueryString_2)
                ExecuteQueryOnSQLServer2008ExpressEdition(QueryString_3)
                ExecuteQueryOnSQLServer2008ExpressEdition(QueryString_4)
          .................
           Me.Close
          Catch ex as Exception
          .................
          Finally
          .................
          End Try
    End Sub

    Όλος ο κώδικας δουλεύει μια χαρά, αλλά σε έναν από τους πελάτες μου συμβαίνει το εξής περίεργο το οποίο μάλιστα εγώ δεν μπορώ να το αναπαράγω με κάποιο τρόπο ώστε να καταλάβω ποιά είναι η πηγή του προβλήματος.  Στο συγκεκριμένο πελάτη λοιπόν κάποιες φορές  χωρίς να έχει "σηκωθεί" κάποιο exception, τα Queries εκτελούνται 2 φορές παρ' ότι η τελευταία εντολή είναι η Me.Close.  Ακόμη να σημειώσω ότι αυτή η Sub καλείται ΜΟΝΟ από το συγκεκριμένο Button_Click. 
    Φαίνεται δηλαδή σαν να πατιέται δύο φορές το Button, να εκτελείται 2 φορές ο κώδικας, πριν να κλείσει η φόρμα μου.

    Όποια βοήθεια ευπρόσδεκτη!!
    Ευχαριστώ !!!!




  •  01-09-2009, 17:24 53365 σε απάντηση της 53364

    Απ: Διπλή εκτέλεση Event

    Μήπως όντως πατιέται δυο φορές το Button; Γιατί δεν βάζεις tracing που γράφει σ'ένα αρχείο να ξέρεις τι γίνεται.. Μέτρα πόσες φορές το έχει εκτελέσει. Μπορεί να είναι τόσο απλό όσο ενα defect mouse..
    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  02-09-2009, 11:42 53381 σε απάντηση της 53365

    Απ: Διπλή εκτέλεση Event

    Παναγιώτη, σε ευχαριστώ καταρχήν για την απάντησή σου.

    Έχω βάλει το tracking που λες και όντως δείχνει να πατιέται δύο φορές το Button με διαφορά χρόνου περίπου τα 15/100 του δευτερολέπτου.  Αυτό όμως είναι που δεν μπορώ να καταλάβω.  Εφόσον δεν υπάρχει exception, θα πρέπει ο κώδικας στο πρώτο click να εκτελεί το Me.Close της φόρμας.  Με κλειστή τη φόρμα λοιπόν πως είναι δυνατό να έχω και δεύτερο Button_Click?

    Υπάρχει περίπτωση το δεύτερο event να σηκώνεται σε ξεχωριστό Thread;  Το πρόβλημα εμφανίζεται μια φορά στα 500 click του button και μόνο στο συγκεκριμένο πελάτη.  Υπάρχει μήπως περίπτωση να είναι ζήτημα του λειτουργικού; δεδομένου ότι είναι από τους ελάχιστους πελάτες μου που χρησιμοποιεί Vista  σε αντίθεση με τη πλειοψηφία που χρησιμοποιούν XP.
  •  21-09-2009, 00:29 53865 σε απάντηση της 53381

    Απ: Διπλή εκτέλεση Event

    Καλησπέρα,

    Για να είσαι σίγουρος, γιατί δεν κάνεις κάτι σαν αυτό :

    Shared Dim _lock As New Object();

    Private Sub CompleteArrival()
           Try

           SyncLock (_lock)

          .................
                ExecuteQueryOnSQLServer2008ExpressEdition(QueryString_1)
                ExecuteQueryOnSQLServer2008ExpressEdition(QueryString_2)
                ExecuteQueryOnSQLServer2008ExpressEdition(QueryString_3)
                ExecuteQueryOnSQLServer2008ExpressEdition(QueryString_4)
          .................

           Me.Close

           End SyncLock

          Catch ex as Exception
          .................
          Finally
          .................
          End Try
    End Sub
  •  21-09-2009, 00:44 53866 σε απάντηση της 53865

    Απ: Διπλή εκτέλεση Event

    Δημήτρη, αυτό που προτείνεις δεν θα δουλέψει, απλά γιατί το δεύτερο event θα εκτελεστεί αφού ολοκληρωθεί το πρώτο. Αλλά ακόμα και αν το event το καλούσαν δύο διαφορετικά threads, πάλι ο κώδικας θα έτρεχε δύο φορές. Σε κάθε περίπτωση το SyncLock δεν είναι λύση. Πρέπει να βρεθεί η πραγματική αιτία του προβλήματος αλλιώς μπορεί να προκληθούν μεγαλύτερα προβλήματα λόγω μπλοκαρισμάτων μεταξύ thread.

    Στην παρούσα περίπτωση πάντως πιο πιθανό μου φαίνεται να έχει πρόβλημα το ποντίκι του πελάτη. Ζήτημα λειτουργικού δεν είναι σε καμμία περίπτωση, ούτε έχει σημασία ότι είναι Vista.

    Όσον αφορά το Close και τα events, η Close κατά κανόνα καταστρέφει τη φόρμα, υπάρχουν όμως και εξαιρέσεις οι οποίες περιγράφονται στο documentation. Μία περίπτωση είναι η φόρμα να έχει εμφανιστεί με τη ShowDialog. Σε αυτή την περίπτωση η Close δεν καταστρέφει τη φόρμα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-09-2009, 11:40 53870 σε απάντηση της 53866

    Απ: Διπλή εκτέλεση Event

    Στο event click του button δώσε στο property του button Enabled=false έτσι ώστε ακόμα και δύο φορές να πατήσει το κουμπί του ποντικιού η δεύτερη δέν θα μπορέσει να εκτελεστεί. 

     

        Private Sub cmdRegister_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRegister.Click

            cmdRegister.Enabled=false 
            CompleteArrival()


        End Sub


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