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

 

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

Πολύ περίεργο και εκνευριστικό Error.

Îåêßíçóå áðü ôï ìÝëïò geochatz. Τελευταία δημοσίευση από το μέλος anjelinio στις 19-04-2006, 19:26. Υπάρχουν 12 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-04-2006, 13:27 11859

    Indifferent [:|] Πολύ περίεργο και εκνευριστικό Error.

    Αντιμετωπίζω το παρακάτω πρόβλημα σε μία εφαρμογή που έχω φτιάξει και μπορώ να πω ότι είναι πολύ περίεργο και εκνευριστικό. Η εφαρμογή είναι γραμμένη σε C# κάτω απο το Framework 1.1. Το πρόβλημα είναι το εξής.

    Κάνοντας αναζήτηση στη βάση μου έρχονται όλα τα αποτελέσματα σε ένα Grid (Janus grid). Με διπλό κλικ λοιπόν στο grid ανοίγει μια άλλη φόρμα που εμφανίζει τα στοιχεία της επιλεγμένης εγγραφής. Πριν γίνει αυτό η φόρμα αναζήτησης κρύβεται έτσι ώστε όταν ο χρήστης κλείσει την φόρμα με τα στοιχεία της εγγραφής να του εμφανιστουν και πάλι τα αποτελέσματα της τελευταίας του αναζήτησης. Θα πρέπει εδώ να πω ότι η φόρμα αναζήτησης ανοίγει ως frm.ShowDialog (true).

    Ολα πάνε καλά, όμως κατα καιρούς κάνοντας διπλο κλικ πάνω στo grid της φόρμας αναζήτησης παρουσιάζεται ένα Application.ThreadException error. To error αυτό πιανεται απο ένα System.Threading.ThreadExceptionEventHandler. Το Log που δημιουργείται (εχω φτιάξει ενα Error Provider) είναι το παρακάτω :

    --------------------- START : 10/4/2006 12:45:07 μμ ---------------------
    OS : Microsoft Windows NT 5.1.2600.0
    Has Shutdown Started : False
    CLR version : 1.1.4322.2032
    Error Message : Object reference not set to an instance of an object.
    Stack Trace:    at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
       at System.Windows.Forms.Control.DefWndProc(Message& m)
       at System.Windows.Forms.Control.WmUpdateUIState(Message& m)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       at System.Windows.Forms.ContainerControl.WndProc(Message& m)
       at System.Windows.Forms.ParkingWindow.WndProc(Message& m)
       at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    --------------------- END : 10/4/2006 12:45:07 μμ ---------------------

    Το περίεργο είναι το error δεν εμφανίζεται με την ίδια συχνότητα, οπότε δεν μπορώ να καταλάβω τι φταίει. Ακόμα το error δεν το πιάνει κανένα Try..Catch block μέσα στο πρόγραμμα αλλά είναι τόσο σοβαρό που μετά το System.Threading.ThreadExceptionEventHandler block κλείνει η εφαρμογή.

    Μήπως ξέρει κανείς τι μπορεί να φταίει;;;;

    Only two things are infinite, the universe and the human stupidity, and I'm not sure about the former.

    Albert Einstein - US (German-born) physicist (1879 - 1955)
  •  13-04-2006, 14:54 11864 σε απάντηση της 11859

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Από το μήνυμα λάθους που βγαίνει Object reference not set to an instance of an object μου δίνεται να καταλάβω πως κάποια μεταβλητή δείχνει σε κάποιο object το οποίο ακόμα δεν έχει φορτωθεί, ή είχε φορτωθεί έχει γίνει dispose και η μεταβλητή αυτή δεν γνωρίζει τίποτα σχετικά.

    Το περίεργο είναι ότι δεν το κάνει συνέχεια, άρα πιο δύσκολο ακόμα να εντοπιστεί. Στο έχει κάνει ποτέ την πρώτη φορά που φορτώνεις την φόρμα με τα στοιχεία της εγγραφής; Αν όχι τότε στο κλεισιμο κάτι γίνεται. Την φόρμα πως την κλείνεις; Με το X πάνω δεξιά ή με Button. Tι κώδικα έχεις βάλει στο Button, αν ο χρήστης πατήσει το X τι γίνεται εκτελείτε κάποιος κώδικας;

    Εφόσων η φόρμα εφορτώνεται σαν modal άρα λογικά σε κάποιο σημείο θα έχεις κώδικα περίπου τον εξής:

    Dim fDetails as New DetailsForm

    fDetails.Showdialog

    Πως κάνεις έλεγχο για να δεις αν έχει φορτωθεί η φόρμα για να μην φορτώσεις καινούριο instance; Άρα λογικά χρησιμοποιείς μία μεταβλητή που να σου λέει αν αυτή η φόρμα είναι ήδη φορτωμένη ή όχι. Μήπως κάπου εκεί έχεις κάνει κάτι που σου διαφεύγει;

  •  13-04-2006, 15:23 11867 σε απάντηση της 11864

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Για να μην το κάνει συνέχεια αλλα σε ακαθόριστες περιπτώσεις, ενδέχεται το πρόβλημα είναι data specific. Μήπως δλδ πριν ανοίξεις τη φόρμα με τις λεπτομέρειες διαβάζεις την τιμή κάποιου στοιχείου που σε ορισμένες εγγραφές είναι null και για αυτο σου πετάει το Object reference not set to an instance of an object.
  •  13-04-2006, 15:37 11869 σε απάντηση της 11859

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Παιδιά, μην ξεχνάτε ότι έγινε ThreadException, όχι NullReferenceException. Πρώτα απ' όλα, χρησιμοποιείς threads ή asynchronous delegates? Αν όχι, είναι πολύ πιθανό το πρόβλημα να οφείλεται στο ίδιο το JanusGrid. Αν ναι, θα πρέπει να ελέγξεις τον κώδικα των Threads ή των callbacks. Μήπως πειράζεις το UI μέσα από κάποιο async delegate ή Thread? Αυτό απαγορεύεται και μπορεί να οδηγήσεις σε άπειρες μορφές περίεργων λαθών. Νομίζω το FxCop πιάνει τέτοια λάθη, οπότε καλό είναι να το χρησιμοποιήσεις για να δεις τί έγινε.

    Στο .ΝΕΤ 2.0 τα πράγματα είναι πιο εύκολα, καθώς ο compiler βγάζει errors όπου γίνεται κλήση του UI από άλλο thread.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  14-04-2006, 00:04 11875 σε απάντηση της 11859

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Κάνε μια καλή, και δοκίμασε να κρύβεις τη φόρμα αναζήτησης, ΑΦΟΥ εμφανιστεί η φόρμα με τα στοιχεία της εγγραφής ... just a hunch ... ίσως αυτά τα IntPtr hWnd που δείχνουν σε window handles ...
    Angel
    O:]
  •  14-04-2006, 09:00 11882 σε απάντηση της 11875

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Ρίξε επίσης μια ματιά, μήπως το error σχετίζεται με το ακριβές σημείο που γίνεται το double click, πχ ακριβώς πάνω στο διαχωριστικό border ή πάνω σε ένα scrollbar.
    Χρήστος Γεωργακόπουλος
  •  14-04-2006, 12:53 11896 σε απάντηση της 11859

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Πρώτα απ'όλα θα ήθελα να σας ευχαριστήσω όλους για τις απαντήσεις σας. Λοιπόν μέσα απο το πρόγραμμα δεν χρησιμοποιώ ούτε threads ούτε asynchronous delegates. Το πρόβλημα σίγουρα δεν είναι Null Reference μιας και η ίδια εγγραφή (που το πρόγραμμα μπορεί να σκάσει) ανοίγει σε άλλα "τρεξίματα" του προγράμματος.

    Ψάχνοντας στο Internet σε διάφορα forum είδα ότι μπορεί να φταίει το double click ¨η το scrollbar όπως λέει ο Χρήστος όμως δεν μπορώ να το προσδιορησω μιας και φαίνεται να δουλευει καλά. Το πιο περίεργο απ'ολα είναι ότι υπάρχει περίπτωση το πρόγραμμα να μη σκάσει ποτέ αλλά και να σκάσει μετά απο 6-7 αναζητήσεις,

    Κατι άλλο που έχω εντοπίσει είναι ότι όταν σκάει γίνεται πάντα αφού κλείσω την πρώτη αναζήτηση. Και τι εννοώ.

    Ανοίγω την αναζήτηση και μου φερνει κάποιες εγγραφες. Μπαίνω και βγαίνω απο αυτές τις εγγραφές και όλα είναι οκ. Κλεινω τα αποτελέσματα της αναζήτησης και στη συνέχεια ανοίγω μία νέα. Τότε το πρόγραμμα σκάει. Όχι απόλυτα στη δεύτερη αναζήτηση (μπορεί να είναι και στη δεκατη ή στην δεκατηπέμπτη) όμως σίγουρα όχι στη πρώτη!

    Την εφαρμογή θα τη γυρνούσα σε .ΝΕΤ 2.0 αλλά θα πρέπει πρώτα να αγοράσω τα ανάλογα Controls....
    Only two things are infinite, the universe and the human stupidity, and I'm not sure about the former.

    Albert Einstein - US (German-born) physicist (1879 - 1955)
  •  14-04-2006, 16:14 11905 σε απάντηση της 11896

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Δοκίμασε να αδειάσεις από το δικό σου κώδικα την φόρμα που γίνεται showdialog και δες αν αναπαράγεται το πρόβλημα. Αν όχι, τότε ίσως κάτι δεν κλείνεις σωστά στη φόρμα που ανοίγεις με αποτέλεσμα να έχει πρόβλημα στο κλείσιμό της.
    Χρήστος Γεωργακόπουλος
  •  14-04-2006, 23:45 11913 σε απάντηση της 11905

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Παρόλα αυτά θα συμφωνήσω με τον pkanavos και θα πω ότι το αρχικό μου post ήταν εκτός θέματος. Δεν πρόσεξα το ThreadException. Kαι εφόσων κατηγορηματικά λες ότι δεν χρησιμοποιείς τότε θα έλεγα μήπως χρησιμοποιεί το control. Κάνε μία δοκιμή αν θες και έχεις τον χρόνο. Δοκίμασε ένα άλλο grid ενός άλλου κατασκευαστή με τον ίδιο κώδικα. Σίγουρα κάτι θα αλλάξει στο διπλό κλικ που κάνεις για το πως θα βρεις την τρέχουσα εγγραφή αλλά καταλαβαίνεις τι εννοώ. Κάντο για δοκιμή και δες αν το κάνει. Ίσως το control να έχει πρόβλημα και ο κώδικάς σου να είναι σωστός.
  •  15-04-2006, 00:11 11914 σε απάντηση της 11859

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Δοκίμασε να κρύψεις την φόρμα με μια καθυστέρηση 30-50ms μετά το διπλό κλικ..Ειναι σχεδόν σίγουρο οτι είναι "προβλημα" του component , το θέμα είναι να βρεις ενα προσωρινό workaround μεχρι να βγάλεις άκρη πραγματικά τι γινεται..Με την εταιρία που το βγάζει δοκίμασες να μιλήσεις?
    Παναγιώτης Κεφαλίδης

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

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  15-04-2006, 10:09 11917 σε απάντηση της 11859

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Κατ' αρχάς ποιά version του JanusGrid χρησιμοποιείς.

    Εάν είναι η V1 τότε μάλλον πρέπει να κατεβάσεις το ανάλογο fix patch από το site της janus εάν είναι το V2 τότε μάλλον κάτι άλλο τρέχει.

    Για να σου πεταέι ThreadException μάλλον πρέπει να έχεις το V2 και άν έχεις χρησιμοποιήσει μέρος του κώδικα που έχει στα samples η janus σίγουρα είσαι σε Thread από το ξεκίνημα του application γιατί έκεί ξεκινά μέ ένα Public Shared Sub Main() οπότε σέ εκείνο το σημείο σίγουρα πιάνει το exception και γίνεται application.exit γι 'αυτό και κλείνει η εφαρμογή.

    Επίσης αντί για doubleclick δοκίμασε το άνοιγμα της φόρμας μέ ένα toolbarbutton για να δείς άν οφείλεται στο control το λάθος ή κάτι άλλο.

    Πάντως επειδή χρησιμοποιώ αρκετό καιρό το αντίστοιχο control όπως και άλλων vendors(Infragistics) δέν έχω παρατηρήσει τίποτα τέτοιο και πιστεύω ότι κάτι γίνεται μέσα στον κώδικα που έχεις.

    Επίσης θα σου πρότεινα να επισκευτής το site της Janus και να θέσεις το ερώτημά σου στό Forum έχουν πολύ καλή ανταπόκριση στην επίλυση τέτοιων προβλημάτων.

    http://www.janusys.com/controls/


    Ιωάννης Μανουσάκης
  •  19-04-2006, 12:37 12020 σε απάντηση της 11875

    Απ: Πολύ περίεργο και εκνευριστικό Error.


     anjelinio wrote:
    Κάνε μια καλή, και δοκίμασε να κρύβεις τη φόρμα αναζήτησης, ΑΦΟΥ εμφανιστεί η φόρμα με τα στοιχεία της εγγραφής ... just a hunch ... ίσως αυτά τα IntPtr hWnd που δείχνουν σε window handles ...


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

    Και πάλι σας ευχαριστώ όλους.

    Only two things are infinite, the universe and the human stupidity, and I'm not sure about the former.

    Albert Einstein - US (German-born) physicist (1879 - 1955)
  •  19-04-2006, 19:26 12028 σε απάντηση της 12020

    Απ: Πολύ περίεργο και εκνευριστικό Error.

    Η θεωρία μου ήταν η εξής ... αυτό το IntPtr hWnd που βλέπεις στο stack trace μάλλον αναφέρεται σε window handle, ή με άλλα λόγια σε ένα pointer σε φόρμα. Όταν η φόρμα έχει λοιπόν κρυφτεί, για κάποιο internal λόγο των windows αυτός ο pointer πλέον δείχνει ... στο ηλεκτρονικό κένο :)

    Τώρα .. υποθέτω οτι η νέα φόρμα με τα details τις περισσότερες φορές προλάβαινε, πρίν χαθεί αυτός ο pointer, αλλα κάποιες άλλες ... απλώς .. όχι :P και έτρωγες το παράξενο native exception. Με το να κρύβεις τα results αφού ανοίξει η details, σιγουρεύεις στην ουσία οτι δεν έχει χαθεί ο pointer.

    Αχχχ ... θυμήθηκα τον Petzold τώρα και συγκινήθηκα ... άντε, καλό μας Πάσχα
    Angel
    O:]
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems