<?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>Απ: Cross threading και ανάλυση emf αρχείου.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69536.aspx</link><pubDate>Sun, 04 Mar 2012 01:11:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69536</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69536.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=69536</wfw:commentRss><description>Αν δεν έχεις διαφορετικό thread τί το θέλεις το Invoke? Αν βάζεις κώδικα "μήπως", χωρίς να καταλαβαίνεις τί κάνει ή γιατί, θα αντιμετωπίσεις προβλήματα όπως αυτό που αντιμετωπίζεις τώρα.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ο κώδικας έχει άλλα, σοβαρότερα προβλήματα. Καταρχήν, είναι μεγάλο σφάλμα να βάζεις λογική πίσω από το Click event. Όπως βλέπεις και ο ίδιος, μετά είναι πολύ δύσκολο να την καλέσεις αν θέλεις να τη χρησιμοποιήσεις και σε άλλο σημείο. Αντί να χρησιμοποιείς το PerformClick απλά φτιάξε μία άλλη μέθοδο την οποία θα καλείς από όπου αλλού θέλεις.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Επιπλέον ο κώδικας στον οποίο βασίστηκες είναι κακός:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Αντί να χρησιμοποιήσει κάποιο using για να καλέσει αυτόματα το Dispose, το αφήνει στη μοίρα του. Αν υπάρξει κάποιο exception το Dispose δεν θα κληθεί ποτέ&lt;/li&gt;&lt;li&gt;"Καρφώνει" ένα AddressOf για να κρύψει τον τύπο του callback αντί να κάνει cast σε&amp;nbsp;Graphics.EnumerateMetafileProc&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Τέλος, δοκίμασες να βάλεις κάποια breakpoints για να δεις τί κάνει ο κώδικας σου? Αν δεν σηκώνει κάποιο exception, μάλλον θα πρέπει να δεις τί καλείται τελικά και τί όχι.&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Απ: Cross threading και ανάλυση emf αρχείου.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69534.aspx</link><pubDate>Sat, 03 Mar 2012 18:00:23 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69534</guid><dc:creator>sgkin</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69534.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=69534</wfw:commentRss><description>Δεν έτρεχα τον κώδικα σε διαφορετικό thread, απλά είχα τον κώδικα&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="background-color:transparent;font-family:'Courier New';font-size:11px;"&gt;MethodInvoker invoker &lt;span style="color:red;background-color:transparent;"&gt;=&lt;/span&gt; () =&amp;gt;
            {
                button1.PerformClick();  &lt;span style="color:green;background-color:transparent;"&gt;//ektelei ton kodika tou koumpiou 1.&lt;/span&gt;
            };
            &lt;span style="color:blue;background-color:transparent;"&gt;if&lt;/span&gt;(button1.InvokeRequired)
            {
                &lt;span style="color:blue;background-color:transparent;"&gt;this&lt;/span&gt;.Invoke(invoker);
            }
            &lt;span style="color:blue;background-color:transparent;"&gt;else&lt;/span&gt;
            {
                invoker();
            }&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="background-color:transparent;font-family:'Courier New';font-size:11px;"&gt;εκεί που ήθελα. γιατί και σε μια άλλη περίπτωση που μου έβγαζε πρόβλημα cross-threading, έβαλα ένα MethodInvoker invoker, και λύθηκε το θέμα.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="'Courier New'"&gt;&lt;span style="font-size:11px;"&gt;Τωρα δουλεύει, ευχαριστώ.&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Απ: Cross threading και ανάλυση emf αρχείου.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69514.aspx</link><pubDate>Fri, 02 Mar 2012 18:52:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69514</guid><dc:creator>nikos123</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69514.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=69514</wfw:commentRss><description>&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Καλώ την test() από thread του button2 και δεν βγάζει πρόβλημα για cross-threading.&lt;/span&gt;&lt;span style="background-color:transparent;font-family:'Courier New';font-size:11px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="background-color:transparent;"&gt;&lt;font face="'Courier New'"&gt;&lt;span style="font-size:11px;"&gt;Εσύ πως την καλείς; Μήπως έχεις κάποιο επιπλέον thread; &amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="'Courier New'"&gt;&lt;span style="font-size:11px;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&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;private&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; button2_Click(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            System.Threading.Thread t &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;new&lt;/span&gt; System.Threading.Thread(test);
            t.Start();
        }
        &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;private&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; test()
        {
            MethodInvoker invoker &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; () =&amp;gt;
            {
                button1.PerformClick();  &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;//ektelei ton kodika tou koumpiou 1.&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;(button1.InvokeRequired)
            {
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;this&lt;/span&gt;.Invoke(invoker);
            }
            &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;else&lt;/span&gt;
            {
                invoker();
            }
        }&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="background-color:transparent;"&gt;&lt;font face="'Courier New'"&gt;&lt;span style="font-size:11px;"&gt;Πάντως το κείμενο της EmfExtTextOutW δεν είναι απλά unicode.&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;</description></item><item><title>Απ: Cross threading και ανάλυση emf αρχείου.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69513.aspx</link><pubDate>Fri, 02 Mar 2012 17:50:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69513</guid><dc:creator>sgkin</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69513.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=69513</wfw:commentRss><description>Βαασικά θέλω να πάρω το κείμενο. Αν πετύχω π.χ την ΕmfExtTextOutW παίρνω το κείμενο.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αυτό το κομμάτι μου δουλεύει, απλά το πρόβλημά μου είναι αυτό που περιέγραψα προηγουμένως.&lt;/div&gt;</description></item><item><title>Απ: Cross threading και ανάλυση emf αρχείου.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69510.aspx</link><pubDate>Fri, 02 Mar 2012 09:41:06 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69510</guid><dc:creator>nikos123</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69510.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=69510</wfw:commentRss><description>Από περιέργεια , τι θες να αναλύσεις στο EMF;</description></item><item><title>Cross threading και ανάλυση emf αρχείου.</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69509.aspx</link><pubDate>Fri, 02 Mar 2012 08:15:36 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69509</guid><dc:creator>sgkin</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69509.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=69509</wfw:commentRss><description>Αυτό που θέλω να κάνω είναι να αναλύσω ένα .emf αρχείο.&lt;br&gt;
Βρήκα ένα παράδειγμα κώδικα σε VB.NET εδώ .&amp;nbsp;&amp;nbsp; &lt;a href="http://www.vb-helper.com/howto_net_enumerate_metafile.html"&gt;http://www.vb-helper.com/howto_net_enumerate_metafile.html&lt;/a&gt;&amp;nbsp;(&lt;span style="font-family:'Times New Roman';line-height:normal;font-size:medium;"&gt;Enumerate
 the records in a Windows metafile (WMF) or enhanced metafile (EMF) in VB .NET).&lt;br&gt;
  &lt;br&gt;
&lt;/span&gt;Μετέτρεψα τον κώδικα σε c# και τώρα η μέθοδος που κάνει την ανάλυση έχει αυτή τη μορφή &lt;br&gt;
&lt;div style="color:#222222;font-family:arial,sans-serif;font-size:13px;line-height:normal;"&gt;
&lt;p&gt;public &amp;nbsp;bool ListRecords(EmfPlusRecordType recordType, int flags, int dataSize, IntPtr data, PlayRecordCallback callbackData)&lt;br&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;div style="color:#222222;font-family:arial,sans-serif;font-size:13px;line-height:normal;"&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;

&lt;div style="color:#222222;font-family:arial,sans-serif;font-size:13px;line-height:normal;"&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; listBox.Items.Add(recordType.ToString());&lt;/div&gt;

&lt;div style="color:#222222;font-family:arial,sans-serif;font-size:13px;line-height:normal;"&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;

&lt;div style="color:#222222;font-family:arial,sans-serif;font-size:13px;line-height:normal;"&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;

&lt;div style="color:#222222;font-family:arial,sans-serif;font-size:13px;line-height:normal;"&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return true;&lt;/div&gt;


&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;την καλώ μέσα από ένα κουμπί κάπως έτσι.&lt;/p&gt;
&lt;div style="color:#222222;font-family:arial,sans-serif;font-size:13px;line-height:normal;"&gt;
&lt;div&gt;
&lt;p&gt;private void button1_Click(object sender, EventArgs e)&lt;br&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;/div&gt;

&lt;div style="color:#222222;font-family:arial,sans-serif;font-size:13px;line-height:normal;"&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Metafile mf = new Metafile("test.emf");&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color="#EE82EE"&gt;&amp;nbsp;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;this.CreateGraphics().&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;EnumerateMetafile(mf, new PointF(0, 0), ListRecords);&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mf.Dispose();&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt;Η κλήση του "κιτρινισμένου" στον αυθεντικό κώδικα (VB.NET) είναι  
Me.CreateGraphics.EnumerateMetafile(&amp;nbsp; mf, New PointF(0, 0),&amp;nbsp;&amp;nbsp; AddressOf 
ListRecords) &lt;br&gt;
&lt;/p&gt;
Όσες φορές και να πατήσω το κουμπί, ο κώδικας εκτελείται κανονικά, και μου παρουσιάζει την ανάλυση του emf.&lt;br&gt;
&lt;p&gt;Μεσα στον κώδικα που θέλω να το χρησιμοποιήσω, επειδή υπάρχει cross-threading πρόβλημα,&amp;nbsp; έχω τον κώδικα&lt;/p&gt;
&lt;p&gt;&amp;nbsp; MethodInvoker invoker = () =&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button1.PerformClick();&amp;nbsp; //ektelei ton kodika tou koumpiou 1.&lt;br&gt;
  &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (button1.InvokeRequired)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Invoke(invoker);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; invoker();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Με αυτό τον κώδικα το "&lt;font color="#EE82EE"&gt;&amp;nbsp;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;this.CreateGraphics().&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;EnumerateMetafile(mf, new PointF(0, 0), ListRecords);&lt;/font&gt;" εκτείλεται είτε μια φορά είτε 
καμία. Για πιο λόγο; Μήπως θα έπρεπε να βάλω κάτι αντίστοιχο του 
AddressOf και στον κώδικα της c#; Σε 2-3 σαιτ που κοίταξα, έλεγαν ότι 
δεν χρειάζεται να βάλουμε κάτι.
&lt;/p&gt;&lt;p&gt;Ή μήπως είναι κάτι άλλο;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;/p&gt;
&lt;br&gt;</description></item></channel></rss>