<?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>Απ: Deserialized objects "ξεχνάνε" τα event handler τους (VB.NET)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/41587.aspx</link><pubDate>Thu, 17 Apr 2008 20:26:50 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:41587</guid><dc:creator>Sunburn</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/41587.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=41587</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;KelMan:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;Τα events - που στην πραγματικότητα είναι
delegates&amp;nbsp;-&amp;nbsp;όταν γίνονται serialize/deserialize&amp;nbsp;κάνουν
serialize/deserialize και τους&amp;nbsp;delegate subscribers,&amp;nbsp;δηλαδή τους event
handlers,&amp;nbsp;ακόμη κι αν αυτοί είναι private members. Αυτό σημαίνει ότι θα
πρέπει να είναι Serializable.&amp;nbsp;Βέβαια, αν δεν κάνω λάθος,&amp;nbsp;η
τυπική&amp;nbsp;συμπεριφορά&amp;nbsp;είναι να πάρεις exception όταν&amp;nbsp;δεν ικανοποιείται η
συνθήκη.&lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;Αυτό σκεφτόμουν κια εγώ. 'Αλλωστε αν ολόκληρη
η class ειναι serializable (και η Α και η Β) τότε λογικά και ο event
handler θα είναι το ίδιο.&lt;br&gt;&lt;br&gt;Στην VB.NET τουλάχιστον πάντως δεν σου επιτρέπει να ορίσεις explicitly τον handler ως serializable.&lt;br&gt;&lt;br&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;KelMan:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;Αυτό
που μπορείς να κάνεις είναι να υλοποιήσεις το IDeserializationCallback
interface που σου επιτρέπει να πιάσεις τη στιγμή που γίνεται το
deserialization και να κάνεις inject τον initialization κώδικα (βλ.
AddHandler) που θες.&lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;Αυτό όντως δούλεψε! 'Ελπιζα να μην
χρειαστεί να φτάσω σε αυτό το σημείο (γιατι ουσιαστικά ειναι θεραπεία
παρά πρόληψη) αλλά είναι αρκετά εύκολο να πακετάρω όλα τα handler
registrations της κλασης σε μια μέθοδο και να την καλώ είτε από τον
constructor είτε από το OnDeserialization.&lt;br&gt;&lt;br&gt;Ευχαριστώ πολύ για τη συμβουλή.</description></item><item><title>Απ: Deserialized objects "ξεχνάνε" τα event handler τους (VB.NET)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/41579.aspx</link><pubDate>Thu, 17 Apr 2008 17:49:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:41579</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/41579.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=41579</wfw:commentRss><description>&lt;P&gt;Ξέχασα να σου πω ότι για να παίξει το IDeserializationCallback σενάριο θα πρέπει να φροντίσεις να μην κάνει serialize τα events και τους handlers, μαρκάροντας με τα attributes[NonSerialized]&amp;nbsp;τα&amp;nbsp;Events που κάνεις declare και με [field:NonSerialized] τους αντίστοιχους EventHandlers&lt;/P&gt;</description></item><item><title>Απ: Deserialized objects "ξεχνάνε" τα event handler τους (VB.NET)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/41576.aspx</link><pubDate>Thu, 17 Apr 2008 17:31:45 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:41576</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/41576.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=41576</wfw:commentRss><description>Τα events - που στην πραγματικότητα είναι delegates&amp;nbsp;-&amp;nbsp;όταν γίνονται serialize/deserialize&amp;nbsp;κάνουν serialize/deserialize και τους&amp;nbsp;delegate subscribers,&amp;nbsp;δηλαδή τους event handlers,&amp;nbsp;ακόμη κι αν αυτοί είναι private members. Αυτό σημαίνει ότι θα πρέπει να είναι Serializable.&amp;nbsp;Βέβαια, αν δεν κάνω λάθος,&amp;nbsp;η τυπική&amp;nbsp;συμπεριφορά&amp;nbsp;είναι να πάρεις exception όταν&amp;nbsp;δεν ικανοποιείται η συνθήκη.&amp;nbsp;
&lt;P&gt;Αυτό που μπορείς να κάνεις είναι να υλοποιήσεις το IDeserializationCallback interface που σου επιτρέπει να πιάσεις τη στιγμή που γίνεται το deserialization και να κάνεις inject τον initialization κώδικα (βλ. AddHandler) που θες.&lt;/P&gt;</description></item><item><title>Απ: Deserialized objects "ξεχνάνε" τα AddHandler τους (VB.NET)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/41568.aspx</link><pubDate>Thu, 17 Apr 2008 13:05:44 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:41568</guid><dc:creator>γιωργος μπακογιαννης</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/41568.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=41568</wfw:commentRss><description>&lt;font face="verdana,geneva"&gt;Υπάρχει ένα design – pattern που ονομάζετε &lt;a href="http://www.dofactory.com/Patterns/PatternObserver.aspx"&gt;Observer&lt;/a&gt;. &lt;br&gt;&lt;/font&gt;</description></item><item><title>Deserialized objects "ξεχνάνε" τα event handler τους (VB.NET)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/41566.aspx</link><pubDate>Thu, 17 Apr 2008 04:00:28 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:41566</guid><dc:creator>Sunburn</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/41566.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=41566</wfw:commentRss><description>Ενα πρόβλημα για το οποίο είμαι σίγουρος οτι υπάρχει κάποιο τρικ, αλλα δεν το έχω βρει ακόμα...&lt;br&gt;&lt;br&gt;Έχω μια class "Class-A", που θέλω να ακούει για (και να αντιδρά σε) ένα συγκεκριμένο event σε όλα τα (dynamically δημιουργημένα) objects μιας άλλης "Class-B". &lt;br&gt;&lt;br&gt;Επειδή δεν μπορώ να έχω εκ των προτέρων reference στα objects της "Class-B", συνεπώς δεν μπορώ να χρησιμοποιήσω "Public WithEvents myObjectB as Class-B" και "[SomeReactionMethod] Handles myObjectB.SomeEvent". &lt;br&gt;Άρα αναγκαστικά χρησιμοποιώ "AddHandler ClassB.SomeEvent, AddressOf SomeReactionMethod", και το τοποθετώ στον constructor της Class-A, ώστε κάθε καινούργιο instance της αυτομάτως να "στήνει αυτί".&lt;br&gt;&lt;br&gt;Δημιουργώ λοιπόν ένα Class-A object, και στη συνέχεια ένα Class-B object. To πρώτο 'ακούει' το event του δευτέρου μια χαρά, όλα ωραία και καλά.&lt;br&gt;&lt;br&gt;Το πρόβλημα εμφανίζεται όταν τα κάνω και τα δυο serialize (binary, αν έχει σημασία) και στη συνέχεια τα επαναφέρω με deserialization. Τώρα το Object-A για κάποιο λόγο έχει ξεχάσει εντελώς οτι του έχω αναθέσει να ακούει για το event του Object-B.&lt;br&gt;&lt;br&gt;Γιατί συμβαίνει αυτό; Πώς μπορώ να το αντιμετωπίσω;&lt;br&gt;&lt;br&gt;Υποθέτω πως μια λύση θα ήταν να επέμβω στην διαδικασία του deserialization και να προσθέσω ένα εξτρα βήμα που προληπτικά επαναπροσθέτει το event handler (υποθέτωντας το χειρότερο δηλαδή). Φαντάζομαι όμως πως αυτή δεν είναι η καλύτερη λύση.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item></channel></rss>