<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET Framework</title><link>https://www.dotnetzone.gr:443/cs/forums/14/ShowForum.aspx</link><description>Θέματα για threading, remoting, reflection, exception handling, security, regex κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68031.aspx</link><pubDate>Fri, 04 Nov 2011 09:12:29 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68031</guid><dc:creator>George Parissis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68031.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68031</wfw:commentRss><description>&lt;p&gt;Και εγώ δεν καταλαβαίνω πως μπορεί να γίνεται αυτό όπως λες, αλλά αφού έλυσες το πρόβλημα δεν έχω να πω τίποτα.&lt;/p&gt;&lt;p&gt;Συνήθως το να φορτώνουμε δεδομένα στον constructor και να εμπλέκεται handle πρόβλημα&amp;nbsp;για το αν έχει ή όχι εμφανιστεί το control σπάνια θα δω. Δηλαδή θα αρχίσω να αμφιβάλω για τον κώδικα που έχω γράψει όταν φορτώνω δεδομένα σε φόρμες.&lt;/p&gt;&lt;p&gt;Από την άλλη ίσως η χρήση του MDI να δημιουργεί πρόβλημα. Επειδή χρησιμοποιώ και εγώ DevExpress και αφού βγάλαμε το θέμα το cross reference exception από την μέση τότε ρίξε μία ματιά σε αυτό το link. Ίσως ο τύπος να περιγράφει το πρόβλημα που έχεις. &lt;a href="http://www.devexpress.com/Support/Center/p/Q294913.aspx"&gt;http://www.devexpress.com/Support/Center/p/Q294913.aspx&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68029.aspx</link><pubDate>Fri, 04 Nov 2011 07:01:38 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68029</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68029.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68029</wfw:commentRss><description>Λοιπόν η λύση βρέθηκε. Δεν μπορώ να εξηγήσω γιατί δουλεύει αλλά τελικά μοιάζει να είναι συνδυασμός της λειτουργίας&lt;div&gt;Grid της DevExpress, και το πως γίνεται το Handle creation στο .Net.&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Προσπαθώντας να καταλάβω γιατί όταν περνάω κενό το αντικείμενο στην φόρμα τότε η επόμενη δεν κρασάρει, έφτασα μέχρι το σημείο που,&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;αφού φορτώσω τα Data στο Grid και επειδή πρόκειται για Grid Με Master-Detail δομή, κάνω expand όλα τα Detail GridViews Που έχω δημιουργήσει.&lt;/div&gt;&lt;div&gt;Παρατήρησα ότι αν δεν κάνω expand τα Master Views, η επόμενη φόρμα, ΔΕΝ κρασάρει. Για αυτό όταν δεν περνούσα αντικείμενο σαν παράμετρο δεν δημιουργούταν&amp;nbsp;&lt;/div&gt;&lt;div&gt;πρόβλημα, διότι το Grid δεν είχε data για να φτιάξει τα Detail Views και κατ'επέκταση να κάνε τα Master Views Expand.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Επίσης παρατήρησα ότι όλη η διαδικασία του εμπλουτισμού του Grid και του GridView expansion, γίνεται ... στον Constructor. Έχοντας διαβάσει&lt;/div&gt;&lt;div&gt;στο Link του Μάρκου για το πότε δημιουργείται το Handle, μετέφερα τον κώδικα αυτόν στο OnFormLoad event, και... δούλεψε.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Επαναλαμβάνω ότι δεν καταλαβαίνω γιατί. Ο συνειρμός ήταν μηχανικός :"Έχω πρόβλημα με handles, στον constructor δεν δημιουργούνται τα Handles, άρα&amp;nbsp;&lt;/div&gt;&lt;div&gt;μπορεί για αυτό να έχω πρόβλημα.". Τώρα πώς μπορεί να&amp;nbsp;επηρεάζεται&amp;nbsp;η &lt;b&gt;επόμενη&lt;/b&gt;&amp;nbsp;φόρμα από τους handles που δημιουργήθηκαν ή δεν δημιουργήθηκαν στην &lt;b&gt;προηγούμενη&lt;/b&gt;,&amp;nbsp;&lt;/div&gt;&lt;div&gt;αυτό δεν μπορώ να το καταλάβω.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Και για να&amp;nbsp;απενοχοποιήσω&amp;nbsp;το προϊόν της εργασίας του BW, δοκίμασα με ένα αντικείμενο που δεν είχε δημιουργηθεί στον BW και πάλι η φόρμα κράσαρε.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αν κάποιος μπορεί να σκεφτεί μια εξήγηση, θα ήθελα πολύ να την ακούσω.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Όπως και να έχει σας ευχαριστώ για τον χρόνο σας.&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/div&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68024.aspx</link><pubDate>Fri, 04 Nov 2011 03:01:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68024</guid><dc:creator>George Parissis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68024.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68024</wfw:commentRss><description>&lt;p&gt;Κάνε κάτι ακόμα σε παρακαλώ.&lt;/p&gt;&lt;p&gt;Ενεργοποίησε τον κώδικα που χρησιμοποιείς αυτό το άλλο αντικείμενο από το BackgroundWorker αλλά κάνε σχόλιο τον κώδικα που αποδίδει τιμές στα controls της φόρμας. Δηλαδή να τρέξει το BackgroundWorker να εμφανιστεί η προβληματική φόρμα αλλά να μην έχουν τιμές τα controls της φόρμας.&lt;/p&gt;&lt;p&gt;Αν σου περάσει αυτό τότε το πρόβλημά σου είναι cross thread exception. Το Grid της DevExpress έχει την δυνατότητα να μην κάνει catch τα cross thread exceptions και ίσως να το έχεις ενεργοποιήσει ή στο build που δουλεύεις να είναι ήδη ενεργοποιημένο οπότε μετά αναλαμβάνει το framework να σου βγάλει το handle error.&lt;/p&gt;&lt;p&gt;Αν για δοκιμαστικούς λόγους δεν είχες τον BackgroundWorker αλλά έγραφες τον κώδικά σου σε ένα Thread τότε δεν θα είχες πρόβλημα.&lt;/p&gt;&lt;p&gt;Το θέμα, εκεί που το βλέπω εγώ με τις λίγες πληροφορίες που έχω είναι cross thread exception. Πως πέρνεις το αντικείμενο από τον BackgroundWorker και το περνάς σαν παράμετρο στον Constructor? Με το report changed event ή με το Work completed event.?&lt;/p&gt;&lt;p&gt;Κάτι έχεις αφήσει ανοικτό και τρέχει σε άλλο Thread. Για αυτό και το τζούφιο loop έπαιξε.&lt;/p&gt;&lt;p&gt;Από την άλλη αυτό με το XML και dataset&amp;nbsp;που κάνεις εκεί με μπέρδεψε λιγάκι,&amp;nbsp;δεν έχω εμπειρία σε αυτού του είδους της διαδικασίες.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68021.aspx</link><pubDate>Thu, 03 Nov 2011 23:28:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68021</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68021.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68021</wfw:commentRss><description>Με βάση το link που έδωσε ο Libra Storm, θα έλεγα να δοκιμάσεις να περάσεις τα grids σαν παράμετρο όταν γίνει fire το HandleCreated event. Οτιδήποτε κληρονομεί από το Control class έχει αυτό το event.&lt;br&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68020.aspx</link><pubDate>Thu, 03 Nov 2011 23:17:09 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68020</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68020.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68020</wfw:commentRss><description>Μήπως το πρόβλημα υπάρχει στο binding; Ένα workaround θα ήταν να κάνεις instantiate &lt;strike&gt;το reporting control&lt;/strike&gt;&amp;nbsp; (EDIT) τα grids έξω από τη φόρμα, να κάνεις το binding και στη συνέχεια να το περάσεις όλο μαζί σαν παράμετρο στον constructor της φόρμας. Long shot, αλλά για την ώρα δεν έχω σκεφτεί κάτι άλλο.&lt;br&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68019.aspx</link><pubDate>Thu, 03 Nov 2011 23:16:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68019</guid><dc:creator>Libra Storm</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68019.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68019</wfw:commentRss><description>&lt;p&gt;Νομίζω ότι δεν είναι outofmemory exception αλλά δυστυχώς δεν έχω κάτι σίγουρο να σας προτείνω. Αυτό το link περιγράφει μία παρόμοια περίπτωση και στο More Information section αναφέρει ότι πρόκειται γιά null reference &lt;a href="http://support.microsoft.com/kb/949458"&gt;http://support.microsoft.com/kb/949458&lt;/a&gt;&amp;nbsp;. Δοκιμάστε αν θέλετε και IntelliTrace μήπως δείξει κάποιο exception.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68014.aspx</link><pubDate>Thu, 03 Nov 2011 19:03:11 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68014</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68014.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68014</wfw:commentRss><description>Δικό μου λάθος. Νόμιζα ότι καλείς τον BW στο Load event της φόρμας.&lt;br&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68013.aspx</link><pubDate>Thu, 03 Nov 2011 18:56:02 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68013</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68013.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68013</wfw:commentRss><description>Μα αυτό κάνω και τώρα. Παίρνω το αντικείμενο από τον BW, και κάνω create την φόρμα περνώντας το σαν παράμετρο.</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68012.aspx</link><pubDate>Thu, 03 Nov 2011 18:35:48 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68012</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68012.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68012</wfw:commentRss><description>Τότε το μόνο που μπορώ να σκεφτώ, για να μην χαλάσεις το generic, είναι να καλείς τον BackgroundWorker (BW) &lt;b&gt;πριν &lt;/b&gt;καλέσεις τη φόρμα. Τη φόρμα να τη δημιουργείς όταν ο BW τελειώσει ό,τι κάνει και στη συνέχεια να δημιουργήσεις τη φόρμα περνώντας σαν παραμέτρους τα αποτελέσματα της επεξεργασίας του BW.&lt;br&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68011.aspx</link><pubDate>Thu, 03 Nov 2011 17:39:21 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68011</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68011.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68011</wfw:commentRss><description>Η create handle δούλεψε αλλά έκανε ότι κάνει το loop που είχα φτοιάξει. Και δεν μου φαίνεται για καλή λύση εκτός αν απελπιστώ.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Πράγματι όμως αν δεν χρησιμοποιήσω το αντικείμενο που δημιουργείται στον Background Worker, τότε η φόρμα ανοίγει κανονικά.&lt;/div&gt;&lt;div&gt;Το αντικείμενο αυτό είναι απλά ένα report data container. Ένα σύνολο από int properties και 2 collections που περιέχουν objects.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Τίποτα όμως από αυτά δεν κληρονομεί&amp;nbsp;από την Control και δεν έχει να κάνει με gui.&lt;/div&gt;&lt;div&gt;Μάλιστα δοκίμασα να κάνω τα πάντα Clone και πάλι πήρα το ίδιο αποτέλεσμα.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Στην "κακή" φόρμα το μόνο που κάνω είναι display σε Grids (DevEx xtraGrid) τα property values και κάποια αριθμητικά δεδομένα που προκύπτουν από τα collections,&amp;nbsp;&lt;/div&gt;&lt;div&gt;χωρίς όμως να κάνω edit κάτι.&lt;/div&gt;&lt;div&gt;Για να το κάνω αυτό δημιουργώ ένα xml αρχείο το οποίο σώζω και ξαναφορτώνω σε ένα DataSet.&lt;/div&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68008.aspx</link><pubDate>Thu, 03 Nov 2011 03:35:23 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68008</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68008.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68008</wfw:commentRss><description>Δε ξέρω αν θα βοηθούσε να καλέσεις την &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.form.createhandle.aspx"&gt;CreateHandle &lt;/a&gt;Method της φόρμας. Επίσης, ρίξε μια ματιά όσον αφορά στο &lt;a href="http://msdn.microsoft.com/en-gb/library/system.windows.forms.control.createcontrol.aspx"&gt;πότε δημιουργείται&lt;/a&gt; το handle.&lt;br&gt;</description></item><item><title>Απ: Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68007.aspx</link><pubDate>Thu, 03 Nov 2011 03:00:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68007</guid><dc:creator>George Parissis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68007.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68007</wfw:commentRss><description>&lt;p&gt;Αυτό το κάτι που δημιουργείς σε άλλο Thread το κάνεις Bind στην προβληματική φόρμα; Μπορείς να δώσεις περισσότερες λεπτομέρειες; &lt;/p&gt;&lt;p&gt;Πριν το κάνεις όμως αυτό για δοκίμασε να κάνεις σχόλιο τον κώδικα που χρησιμοποιεί αυτό το κάτι από το άλλο Thread και τρέξε την εφαρμογή να δεις αν θα συνεχίσει να σου χτυπάει.&lt;/p&gt;&lt;p&gt;Νομίζω πως η αιτία του προβλήματος δεν είναι το handle απλά λαμβάνεις εκεί το λάθος μίας διαδικασίας που έχει ξεκινήσει νωρίτερα. Το τζούφιο Loop που έβαλες απλά έδωσε χρόνο στην φόρμα να περιμένει να τελειώσει το άλλο Thread για να εμφανιστεί. Κάνε όμως αυτή την μικρή δοκιμή και αν δεν σου χτυπήσει τότε θα πρέπει να δώσεις περισσότερες πληροφορίες για αυτό το αντικείμενο όπως επίσης το πως και με τι σκοπό χρησιμοποιείται στην φόρμα.&lt;/p&gt;</description></item><item><title>Πρόβλημα με ανάθεση Handle από MDI parent σε MDI Child.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/68005.aspx</link><pubDate>Thu, 03 Nov 2011 02:01:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:68005</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/68005.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=68005</wfw:commentRss><description>Έχω το ακόλουθο πρόβλημα.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Στην εφαρμογή μου έχω Φόρμες, αλλά και κλάσεις που κάνουν Facade κάποιες άλλες φόρμες που δεν ανήκουν στην εφαρμογή μου.&lt;/div&gt;&lt;div&gt;Εχω μια MainForm η οποία είναι MDI Control και ότι φόρμα ανοίγω θέλω να την έχω σαν MDI child.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Επίσης, έχω ένα Δέντρο σε ένα DockPanel της DevExpress όπου αναφέρεται κάθε φόρμα που αυτή τη στιγμή είναι ανοικτή.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Για να πραγματοποιήσω το παραπάνω σενάριο έχω φτοιάξει έναν provider που κρατάει όλες τις ανοικτές φόρμες σε ενα collection&lt;/div&gt;&lt;div&gt;και επιστρέφει Singleton Instances των φορμών αυτών. Η συνάρτηση που επιστρέφει τα instances είναι:&lt;/div&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color:#f2f2f2;border:solid 1px #e5e5e5;"&gt;&lt;tr style="vertical-align:top;line-height:normal;"&gt;&lt;td style="width:40px;text-align:right;"&gt;&lt;pre style="font-family:courier new;font-size:11px;color:gray;margin:0px;padding:2px;border-right:solid 1px #e7e7e7;"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 &lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style="margin:0px;padding:2px;padding-left:8px;"&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt; &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// Checks if already exists an opened form of the specified type in the &lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// collection of opened forms. If not creates and registers one.&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;typeparam name="T"&amp;gt; The type of Form to search for or create.&amp;lt;/typeparam&amp;gt;&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;param name="args"&amp;gt; Additional Form contstruction parameters. The order must&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// be the same with the order of appearance in each form's constructor.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;returns&amp;gt; A singleton instance of a form of the requested type. &amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;static&lt;/span&gt; T GetFormInstance&amp;lt;T&amp;gt;(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;params&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;object&lt;/span&gt;[] args) where T:IMdiChildForm
        {
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// If the form is not registered.&lt;/span&gt;
            &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;if&lt;/span&gt; (!m_openedFormsCollection.ContainsKey( &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;typeof&lt;/span&gt;(T) ))
            {

                &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// Create it.&lt;/span&gt;
                IMdiChildForm nForm &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; (IMdiChildForm)Activator.CreateInstance( &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;typeof&lt;/span&gt;(T), args );
                
                nForm.MdiParent &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; GmdMainForm.SingletonInstance;

                &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// Register it.&lt;/span&gt;
                m_openedFormsCollection.Add( nForm.GetType(), nForm );
                
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;if&lt;/span&gt; (MdiChildFormRegistered !&lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;)
                {
                    MdiChildFormRegistered( nForm );
                }
                
                &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// If the form is the first to open, or it opens in maximized environment&lt;/span&gt;
                &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// then it is also Maximized.&lt;/span&gt;
                nForm.WindowState &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; m_openedFormsCollection.Count == 1 ||
                    GmdMainForm.SingletonInstance.MdiChildren.Where( w =&amp;gt; w.WindowState == FormWindowState.Maximized ).
                        Count() &amp;gt; 0
                        ? FormWindowState.Maximized
                        : FormWindowState.Normal;

                &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// Set the closed event to finalize the form instance.&lt;/span&gt;
                nForm.OnMdiChildFormClosed += Form_FormClosed;
            }

            T result &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; (T)m_openedFormsCollection[&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;typeof&lt;/span&gt;(T)];
            
            &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;return&lt;/span&gt; result;
        }&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Τι&amp;nbsp;IMdiChildForm είναι ένα interface που το υλοποιούν τόσο οι φόρμες μου όσο και τα Facades. Ο λόγος που το εισήγαγα είναι ακριβώς το ότι έχω κλάσεις&amp;nbsp;&lt;/div&gt;&lt;div&gt;facdes, αλλιώς απλά θα έβαζα Form.&lt;/div&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color:#f2f2f2;border:solid 1px #e5e5e5;"&gt;&lt;tr style="vertical-align:top;line-height:normal;"&gt;&lt;td style="width:40px;text-align:right;"&gt;&lt;pre style="font-family:courier new;font-size:11px;color:gray;margin:0px;padding:2px;border-right:solid 1px #e7e7e7;"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 &lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style="margin:0px;padding:2px;padding-left:8px;"&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// An interface used to expose necessery Properties of Forms and Form facades and&lt;/span&gt;
    &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// facilitate the access to all form related objects of this program.&lt;/span&gt;
    &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;interface&lt;/span&gt; IMdiChildForm
    {         
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// Exposes the OnFormClose event of an MdiForm.&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;event&lt;/span&gt; OpenedFormsProvider.OnMdiChildFormClosed OnMdiChildFormClosed;
        
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// Exposes the MdiParent of an MdiForm.&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        Form MdiParent { get; set; }

        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// Exposes the Window state of an MdiForm.&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        FormWindowState WindowState { get; set; }

        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// Exposes the Window Title of an MdiForm.&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;string&lt;/span&gt; Text { get; }
       
        IntPtr Handle { get; }

        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// Exposes the function that brings an MdiForm to the Front of the visibility&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// Z-Buffer.&lt;/span&gt;
        &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; BringToFront();

        &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; ShowMdiForm();
    }&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Επιπλέον, για να μην επαναλαμβάνω τον ίδιο κώδικα έχω και μια Extension Function για να ανοίγω τις φόρμες:&lt;/div&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color:#f2f2f2;border:solid 1px #e5e5e5;"&gt;&lt;tr style="vertical-align:top;line-height:normal;"&gt;&lt;td style="width:40px;text-align:right;"&gt;&lt;pre style="font-family:courier new;font-size:11px;color:gray;margin:0px;padding:2px;border-right:solid 1px #e7e7e7;"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 &lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style="margin:0px;padding:2px;padding-left:8px;"&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; ShowMdiChildForm(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;this&lt;/span&gt; IMdiChildForm referencedForm)
        {
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;//(referencedForm as Form).Show();&lt;/span&gt;
            referencedForm.ShowMdiForm();
            
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// Each time a form is Shown, it is brought to the front of the Z-buffer.&lt;/span&gt;
            referencedForm.BringToFront();

            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// If a form remains minimized after the BringToFront event, it means that&lt;/span&gt;
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// the collection of minimized forms is visible, accesible by the mouse and &lt;/span&gt;
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// thus the global state of forms in the MDI container is NOT maximized. We &lt;/span&gt;
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// assume that the user normalized the front form, and to maintain the Normal&lt;/span&gt;
            &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// state as the global one, we bring the window at Normal state.&lt;/span&gt;
            &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;if&lt;/span&gt; (referencedForm.WindowState == FormWindowState.Minimized)
            {
                referencedForm.WindowState &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; FormWindowState.Normal;
            }
        }&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Το παραπάνω σενάριο δουλεύει κανονικά εκτός από μια περίπτωση. Υπάρχη μια φόρμα που αφού την ανοίξω,&amp;nbsp;&lt;/div&gt;&lt;div&gt;μόλις πάω να ανοίξω (το implementation της κλάσης για την συνάρτηση στην γραμμή 4 του 3ου snippet) μετά μια άλλη, τρώω&amp;nbsp;&lt;/div&gt;&lt;div&gt;OutOfMemory Exception και μου λέει το σύστημα ότι δεν μπόρεσε να φτοιάξει handle για την φόρμα που&amp;nbsp;&lt;/div&gt;&lt;div&gt;πάω να ανοίξω. Αυτό το έχω παρατηρήσει ΜΟΝΟ μετά από αυτή την φόρμα. Όλοι οι άλλοι συνδυασμοί δουλεύουν κανονικά.&lt;/div&gt;&lt;div&gt;To implementation της&amp;nbsp;&lt;span class="Apple-style-span" style="font-family:'Courier New';font-size:11px;white-space:pre;"&gt;ShowMdiForm&lt;/span&gt;&amp;nbsp;δεν είναι τίποτα άλλο από την Show() της εκάστοτε φόρμας.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ψάχνοντας να βρώ τι παίζει παρατήρησα το εξής:&lt;/div&gt;&lt;div&gt;Στην γραμμή 16 του πρώτου snippet, μόλις δημιουργείται η φόρμα παίρνει ένα Handle.&lt;/div&gt;&lt;div&gt;Στην γραμμή 18 τώρα, μόλις αναθέσω το MDI parent, αυτός ο Handler χάνεται!&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αν βάλω Break Point εκεί:&lt;/div&gt;&lt;div&gt;α) Στις περιπτώσεις που δεν έχω πρόβλημα, παρατηρώ ότι απλά αλλάζει, και ούτε γάτα ούτε ζημιά.&lt;/div&gt;&lt;div&gt;β) Στην περίπτωση που η φόρμα είναι μετά από αυτήν που αναφέρω, τότε προπαθώντας από το watch (με το mouse) να δώ τον Handle, βλέπω&amp;nbsp;&lt;/div&gt;&lt;div&gt;ότι το property ρίχνει OutOfMemory Exception.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;- Αν πατήσω F5 τρώω και εγώ το Exception.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;- Αν ξανακάνω watch τότε παρατηρώ ότι ο Handle πήρε τιμή και αν πατήσω F5 δουλεύει κανονικά.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Είναι σαν να γίνεται lazy ανάθεση του Handle από το &amp;nbsp;MDIParent. Δοκίμασα να βάλω ένα "τζούφιο" while loop στην γραμμη 17, με συνθήκη Handle!=null,&amp;nbsp;&lt;/div&gt;&lt;div&gt;και παραδόξως δεν παίρνω πια exception αλλά οι φόρμες μου ανοίγουν σε WindowState=Normal αντί για το τρέχω του MDI container.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Όσο για την "κακιά" φόρμα, δεν είναι Facade και η μόνη ιδιαιτερότητα που έχει είναι ότι δεν καλείται από την Main Form, και ότι χρησιμοποιεί ένα αντικείμενο το οποίο έχει φτοιαχτεί από&amp;nbsp;&lt;/div&gt;&lt;div&gt;άλλο thread (BackGround worker).&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Έχει κανείς καμοιά ιδέα?&amp;nbsp;&lt;/div&gt;&lt;div&gt;Ευχαριστώ.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;</description></item></channel></rss>