<?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>Απ: Threading + Clipboard</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/64646.aspx</link><pubDate>Mon, 28 Mar 2011 20:01:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:64646</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/64646.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=64646</wfw:commentRss><description>Ρίξε μια ματιά &lt;a href="http://social.msdn.microsoft.com/Forums/en-SG/winforms/thread/309689be-cc1a-4e3d-8958-75de77189405"&gt;εδώ&lt;/a&gt;. Απ' ό,τι βλέπω βέβαια, η ApartmentState porperty είναι obsolete κι έχει αντικατασταθεί από την &lt;a href="http://msdn.microsoft.com/en-us/library/system.threading.thread.setapartmentstate.aspx"&gt;SetApartmentState &lt;/a&gt;method.&lt;br&gt;</description></item><item><title>Απ: Threading + Clipboard</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/64645.aspx</link><pubDate>Mon, 28 Mar 2011 19:01:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:64645</guid><dc:creator>dimos.homatas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/64645.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=64645</wfw:commentRss><description>Τελικά (και για την ιστορία) άλλαξα τον σχεδιασμό. Αφενός μεν ο Clipboard πρέπει να είναι σε STAThread, αφετέρου δε δεν ήταν αυτή η περίπτωση: στις λειτουργίες του clipboard έπρεπε να είχαν πρόσβαση διαφορετικά threads, και εκεί χαλούσε το θέμα ότι apartment και να υπήρχε.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Η λύση που ακολούθησα: οι λειτουργίες του clipboard εκτελούνται &lt;b&gt;αποκλειστικά&lt;/b&gt;&amp;nbsp;από το UI Thread κατόπιν "παραγγελίας" από τα διάφορα άλλα threads. Στον ρόλο του... σερβιτόρου ένα flag και ένας timer!&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Μάρκο, ευχαριστώ για το feedback.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Το ερώτημα που προκύπτει είναι προς τι αυτή η ιδιοτροπία του Chrome... κάτι σε quick n dirty πατσάρισμα μου μυρίζεται.&lt;/div&gt;</description></item><item><title>Απ: Threading + Clipboard</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/64303.aspx</link><pubDate>Fri, 18 Mar 2011 19:25:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:64303</guid><dc:creator>dimos.homatas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/64303.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=64303</wfw:commentRss><description>Ευχαριστώ, τα έριξα μια ματιά και μου φαίνεται ότι είναι στην σωστή κατεύθυνση. Θα δοκιμάσω την προσέγγιση τώρα το ΠΣΚ και θα ενημερώσω.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Να αναφέρω επίσης ότι όσο οι λειτουργίες αυτές βρίσκονταν μέσα στο UI Thread, δούλευε σωστά. Το πρόβλημα προέκυψε επειδή έχω και ένα mousehook και έτρωγε ένα σκάλωμα η διαδικασία βρες παράθυρο -&amp;gt; κάνε copy, οπότε μπήκε όλο μαζί σε άλλο thread. Και ενώ ξεσκάλωσε το UI, προέκυψε το θέμα με τον clipboard.&lt;/div&gt;</description></item><item><title>Απ: Threading + Clipboard</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/64302.aspx</link><pubDate>Fri, 18 Mar 2011 19:07:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:64302</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/64302.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=64302</wfw:commentRss><description>Δεν έχω ασχοληθεί στο παρελθόν με κάτι τέτοιο, αλλά μου φαίνεται ότι προσπαθείς να φτιάξεις κάποιο clipboard activity monitor. Ίσως σε βοηθήσουν αυτά τα δύο άρθρα:&lt;br&gt;&lt;br&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.codeguru.com/csharp/.net/net_general/tipstricks/article.php/c7315/"&gt;Monitoring Clipboard Activity in C#&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.radsoftware.com.au/articles/clipboardmonitor.aspx"&gt;Create a Windows Clipboard Monitor in C# using SetClipboardViewer.&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;</description></item><item><title>Threading + Clipboard</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/64300.aspx</link><pubDate>Fri, 18 Mar 2011 06:26:02 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:64300</guid><dc:creator>dimos.homatas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/64300.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=64300</wfw:commentRss><description>Καλησπέρα σας, έχω ένα 'περίεργο' πρόβλημα...&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;φτιάχνω ένα εργαλειάκι κάνει αναζητήσεις στο bing επιλέγοντας κείμενο από οπουδήποτε. Κάτι σαν αυτό που κάνουν οι browsers αλλά εκτός περιβάλλοντος browser.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Υπάρχει μία ικανοποιητική δόση unmanaged κώδικα αλλά αυτά δουλεύουν σωστά.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ποια είναι η λογική:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ξεκινά ένα thread το οποίο μεταξύ άλλων χρησιμοποιεί τον clipboard ως buffer για να τσιμπήσει το κείμενο που έχει επιλέξει ο χρήστης.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Γίνεται έλεγχος εάν υπάρχουν δεδομένα στον clipboard.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Εάν ναι, τότε αυτά αποθηκεύονται στον σε έναν buffer, χρησιμοποιείται ο clipboard για να πάρει η εφαρμογή το κείμενο, και μετά τα αρχικά δεδομένα επαναφέρονται.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Και εδώ είναι το πρόβλημα:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;"System.Runtime.InteropServices.ExternalException: Requested Clipboard operation did not succeed."&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Πότε βγαίνει, πότε δεν βγαίνει... από ότι διάβασα&amp;nbsp;&lt;a href="http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/a23c31df-e645-4500-ab4a-e6178510a9b1"&gt;εδώ&lt;/a&gt;&amp;nbsp;προτείνεται η χρήση του Clipboard.SetDataObject(object data, bool copy, int retryTimes, int retryDelay).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Εγώ από την άλλη υλοποίησα αυτό:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&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
 &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;bool&lt;/span&gt; textfailed &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;false&lt;/span&gt;;
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;do&lt;/span&gt;
                {
                    &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;try&lt;/span&gt;
                    {
                        Clipboard.SetText(ClipText);
                        textfailed &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;false&lt;/span&gt;;
                        &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;return&lt;/span&gt;;
                    }
                    &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;catch&lt;/span&gt; 
                    {
                        textfailed &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;true&lt;/span&gt;;
                    }
                    
                } &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;while&lt;/span&gt; (textfailed);&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;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;1) Σίγουρα κάποιο μπέρδεμα γίνεται με τα threads, αλλά οι δοκιμές μου είναι τόσο αθώες που δεν δικαιολογείται αυτό. Κάνω μόνο ένα copy&lt;/div&gt;&lt;div&gt;2) Χτυπάει χωρίς να αντιληφθώ κάποιο pattern&lt;/div&gt;&lt;div&gt;3) Δεν χρησιμοποιώ την SetDataObject, γιατί απλά δεν ξέρω ΠΟΣΕΣ φορές θα χτυπήσει! Βέβαια και η δική μου λύση είναι λίγο... πατέντα. Γιατί ποιος ξέρει πότε θα βγει από το loop.&lt;/div&gt;&lt;div&gt;4) Από την άλλη και SetDataObject κάτι τέτοιο θα κάνει, και δεδομένου ότι περνάει και όρισμα τις επαναλήψεις και τις καθυστερήσεις, μάλλον το κάνει και με... χειρότερο τρόπο.&lt;/div&gt;&lt;div&gt;5) Να επισημάνω ότι χειρίζομαι τους υπόλοιπους τύπος δεδομένων με παρεμφερή τρόπο, απλώς παραθέτω το παράδειγμα του text&lt;/div&gt;&lt;div&gt;6) Χρησιμοποιώ .ΝΕΤ 3.5 SP1&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Επίσης να πω ότι φταίει... ο Chrome! Για κάποιον λόγο, δεν κάνει απευθείας copy όταν πάρει εντολή και χρειάζεται κάποια αναμονή μέχρι να μπουν τα δεδομένα στον clipboard. Το γιατί, θα σας γελάσω, μόνο στον chrome συμβαίνει αυτό. Και μιλάω τόσο για browsers όσο και για όλων των ειδών τα παράθυρα. Οπότε αναγκάστηκα να βάλω ένα Thread.Sleep μέσα σε ένα υπάρχον thread. Κάπου εκεί χάνεται το παιχνίδι, αλλά... δεν μπορώ να καταλάβω περαιτέρω και ακολουθώ συμπτωματική θεραπεία.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Το μόνο που πάει το μυαλό μου είναι να φτιάξω κάναν πιο ψαγμένο μηχανισμό, πχ να αποθηκεύει σε κάποια ουρά τα προϋπάρχοντα δεδομένα του clipboard και να υπάρχει ένα άλλο πρόγραμμα/thread που να κάνει κάποιου είδους clipboard management, αλλά μου φαίνεται υπερβολικό.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ή θα μπορουσα και να πω στον χρήστη "τα δεδομένα σου χάθηκαν" αλλά αυτό δεν είναι καλό.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Οποιαδήποτε βοήθεια/insight είναι παραπάνω από ευπρόσδεκτη.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;</description></item></channel></rss>