<?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>WinForms</title><link>https://www.dotnetzone.gr:443/cs/forums/12/ShowForum.aspx</link><description>Θέματα για rich client / windows εφαρμογές, σε οποιαδήποτε γλώσσα (VB.NET, C#, managed C++, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: CrossThreadCalls ζήτημα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49973.aspx</link><pubDate>Thu, 09 Apr 2009 02:21:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49973</guid><dc:creator>Τάσκος Γιώργος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49973.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=49973</wfw:commentRss><description>Ποτέ όμως....</description></item><item><title>Απ: CrossThreadCalls ζήτημα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49970.aspx</link><pubDate>Wed, 08 Apr 2009 23:59:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49970</guid><dc:creator>mclisme</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49970.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=49970</wfw:commentRss><description>Μάλιστα... Δεν το είχα δοκιμάσει όντως και κάτι μου έλεγε ότι δεν μπορεί να είναι τόσο απλή η λύση! Να λοιπόν που δεν θα αποφύγω το διάβασμα!&lt;br&gt;</description></item><item><title>Απ: CrossThreadCalls ζήτημα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49969.aspx</link><pubDate>Wed, 08 Apr 2009 23:52:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49969</guid><dc:creator>Τάσκος Γιώργος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49969.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=49969</wfw:commentRss><description>Είναι λάθος να απ ενεργοποιείς αυτό το property για τέτοιες περιπτώσεις νομίζω, γιατι η δουλειά του είναι να εντοπίζει ακριβώς&lt;br&gt;αυτό το λάθος που σου πετάει, αν δηλαδή από ένα thread προσπαθείς να κάνεις handle properties κάποιου άλλου thread.&lt;br&gt;Αυτό θεωρείται πρόβλημα όταν γίνεται direct γιατί δεν ξέρεις ποτέ και τι θα σκάσει στην εφαρμογή σου. Κυρίως δηλαδή υπάρχει&lt;br&gt;για Debuging της εφαρμογής.&lt;br&gt;&lt;br&gt;Για να ξεπεράσεις αυτό το πρόβλημα σου και να κάνεις handle τα properties που θέλεις κάποιου άλλου thread θα χρειαστεί να δουλέψεις&lt;br&gt;με delegates kai Invoke, InvokeRequired. Αν δεν γνωρίζεις τι κάνουν οι delegates καλό είναι λίγο να τους δεις περισσότερο.&lt;br&gt;&lt;br&gt;Δες αυτά:&lt;br&gt;&lt;br&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invoke.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invoke.aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired.aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms173171%28VS.80%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms173171(VS.80).aspx&lt;/a&gt;&lt;br&gt;</description></item><item><title>Απ: CrossThreadCalls ζήτημα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49968.aspx</link><pubDate>Wed, 08 Apr 2009 23:46:01 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49968</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49968.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=49968</wfw:commentRss><description>&lt;P&gt;Ναι, σαφέστατα υπάρχει πρόβλημα... Υποθέτω δεν δοκίμασες να τρέξεις την εφαρμογή εκτός του&amp;nbsp;debugger ε; Γιατί τότε θα διαπιστώσεις ότι εξακολουθεί να σκάει. Αυτό το property είναι μόνο για debugging σκοπούς. Ο κανόνας &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;ΠΟΤΕ ΔΕΝ ΠΕΙΡΑΖΟΥΜΕ ΤΑ CONTROLS ΑΠΟ ΑΛΛΟ THREAD ΕΚΤΟΣ ΑΥΤΟΥ ΠΟΥ ΔΗΜΙΟΥΡΓΗΘΗΚΑΝ&lt;/FONT&gt;&lt;/STRONG&gt; είναι απαράβατος.&lt;/P&gt;
&lt;P&gt;Κοίτα εδώ &lt;A href="http://msdn.microsoft.com/en-us/library/waw3xexc.aspx"&gt;http://msdn.microsoft.com/en-us/library/waw3xexc.aspx&lt;/A&gt;&amp;nbsp;για το πως είναι η σωστή υλοποίηση. Μπορείς να μετατρέψεις μετά το παράδειγμα ώστε να ανταποκρίνεται στη δική σου περίπτωση.&lt;/P&gt;</description></item><item><title>CrossThreadCalls ζήτημα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49964.aspx</link><pubDate>Wed, 08 Apr 2009 22:17:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49964</guid><dc:creator>mclisme</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49964.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=49964</wfw:commentRss><description>Γειά χαρά,&lt;br&gt;
Σε κάποιο application που αναπτύσσω με Visual Basic 2008, χρειάζομαι να
γεμίσω ένα listbox/combobox/treeview (κ τα 3 με καλύπτουν, η επιλογή
δεν έχει σημασία)&amp;nbsp; με 5000+ αντικείμενα. Εκτός του ότι η διαδικασία
αυτή παγώνει ολόκληρη την φόρμα μου μέχρι να ολοκληρωθεί, θα ήθελα πάρα
πολύ να ενημερώνω τον χρήστη σε ποιό στάδιο βρίσκομαι ανά πάσα στιγμή
όχι με ένα απλό progressbar αλλά με ένα label που κάθε φορά θα αναφέρει
ποιό στοιχείο "επεξεργάζεται" κάθε στιγμή. Χωρίς να γνωρίζω πολλά για
multithreading λοιπόν, αποφάσισα να χρησιμοποιήσω ένα backgroundworker. Πλεόν, με το κουμπί που συνήθως εκιννούσα τη διαδικασία, απλά καλώ την RunWorkerAsync method του Backgroundworker και στο DoWork event του Backgroundworker, πλέον έχω τον κώδικα που κάνει την παραπάνω εργασία, περίπου κάπως έτσι αλλά όχι με σταθερά νούμερα:&lt;br&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;For&lt;/span&gt; i &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; 1 &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;To&lt;/span&gt; 2000
            ListBox1.Items.&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Add&lt;/span&gt;(i.ToString)
            Label1.Text &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="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"number no "&lt;/span&gt; &amp;amp; i.ToString &amp;amp; &lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;" is being proccessed"&lt;/span&gt;
&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Next&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&amp;nbsp;&lt;br&gt;Φυσικά στο πρώτο τρέξιμο, έλαβα το ανάμενόμενο μήνυμα &amp;lt;&amp;lt; Cross-thread operation not valid: Control 'ListBox1' accessed from a thread other than the thread it was created on. &amp;gt;&amp;gt;, επειδή όμως ήθελα να δω αν θα μπορούσε να δουλέψει έστω και έτσι, προσέθεσα την εντολή:&lt;br&gt;&lt;br&gt;&lt;i&gt;&lt;font size="2"&gt;CheckForIllegalCrossThreadCalls = False&lt;/font&gt;&lt;/i&gt;&lt;br&gt;&lt;br&gt;ακριβώς πριν μπεί στο βρόχο, οπότε και το πρόγραμμα έτρεξε κανονικά, με τη φορμά να ανταποκρίνεται πλήρως όσο γεμίζει το listbox και ταυτόχρονα να εμφανίζεται στο label σε real-time το στοιχείο που επεξεργάζεται ανά πάσα στιγμή.&lt;br&gt;&lt;br&gt;Ερώτηση: Υπάρχει πρόβλημα που έθεσα false την παραπάνω επιλογή? Γιατί τότε μου επιτρέπεται να την απενεργοποιήσω? Αν ναί, ποιός θα ήταν ο απλούστερος τρόπος να ενημερώνω ένα αντικείμενο της φόρμας σε real-time, χρησιμοποιώντας όμως δεδομένα/μεταβλητές που αλλάζουν μέσα στο DoWork event του backgroundworker? Στο documentation διάβασα διάφορα για &lt;b&gt;threads&lt;/b&gt; και &lt;b&gt;delegates&lt;/b&gt; όμως δεν γνωρίζω καν τι είναι, πόσο μάλλον πως χρησιμοποιούνται.&lt;br&gt;&lt;br&gt;Ευχαριστώ!&lt;br&gt;&lt;br&gt;</description></item></channel></rss>