<?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>Re: Φορμα Συνδεδεμένη Με Thread.Γιατί δεν πεθαίνει εντελώς?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3406.aspx</link><pubDate>Sat, 09 Jul 2005 19:54:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3406</guid><dc:creator>Aris</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3406.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=3406</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/forums/Themes/MistBlue/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;pontifikas wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td width="100%" valign="top" class="txt4"&gt;&lt;br /&gt;@Aris &lt;br /&gt;Το thread το κλείνει η dispose() υποτίθεται?&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;br /&gt;Και τα δύο threads είναι &lt;u&gt;GUI Threads&lt;/u&gt; και κλείνουν όταν κλείσει το&amp;nbsp;κύριο παράθυρο που τους ανήκει.&lt;br /&gt;Οπότε, η δεύτερη φόρμα (η splash στο παράδειγμα) κλείνει και "πεθαίνει εντελώς" (=απελευθέρωση του Win32 Handle) καλώντας τις&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#006400"&gt;spl.Invoke(new MethodInvoker(spl.KillMe));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;spl.Dispose();&lt;br /&gt;&lt;/font&gt;Αυτό έχει σαν αποτέλεσμα το GUI thread να πεθάνει. Δεν χρειάζεται τίποτε άλλο. Μπορείς να το δεις εάν στήσεις το παράδειγμα (οδηγίες παρακάτω) και προσθέσεις τις γραμμές&lt;br /&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(splThread.ThreadState.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;if&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt; (splThread.IsAlive) splThread.Abort();&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;ΚΑΤΩ από την &lt;font face="Courier New"&gt;spl = null;&lt;br /&gt;&lt;/font&gt;Θα διαπιστώσεις ότι το δεύτερο thread είναι Stopped και δεν χρειάζεται να κληθεί η Abort() [το if(splThread.IsAlive) είναι πάντα false].&lt;br /&gt;&lt;br /&gt;Ως προς το εάν μπορείς να έχεις δύο ενεργές φόρμες (αυτό φαίνεται να είναι το πρόβλημα, δηλαδή η δεύτερη είναι modal), μήπως την ανοίγεις με &lt;font face="Courier New" color="#000080"&gt;.ShowDialog()&lt;/font&gt; ;&lt;br /&gt;Πάντως, σε δοκιμές που έκανα, παίζει κανονικά. Το λεπτό σημείο είναι το ότι, όταν κλείσει η κύρια φόρμα (που είναι το κύριο παράθυρο του thread), κλείνει και η δεύτερη.&lt;br /&gt;&lt;br /&gt;Μήπως θες να ανοιγοκλείνεις δύο φόρμες και να τερματίζεις την εφαρμογή από οποιαδήποτε από αυτές;&lt;br /&gt;&lt;br /&gt;Άρης&lt;br /&gt;&lt;br /&gt;&lt;font size="2"&gt;&lt;u&gt;Στήσιμο του παραδείγματος:&lt;/u&gt;&lt;br /&gt;1. New C# Windows Application&lt;br /&gt;2. Πλήρης αλλαγή του Form1.cs με τον κώδικα (με κλειστό τον designer, έχεις ανοιχτό μόνο το ραράθυρο του κώδικα)&lt;br /&gt;3. Προσθήκη φόρμας με όνομα "splash"&lt;br /&gt;4. Προσθήκη στην splash μιάς&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void KillMe()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;br /&gt;5. Διόρθωση του &lt;strong&gt;connection string&lt;/strong&gt; της &lt;strong&gt;sqlConnection2&lt;/strong&gt; που έχει η Form1 για να βλέπει τον SQL Server που έχει την Northwind DB&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;</description></item><item><title>Re: Φορμα Συνδεδεμένη Με Thread.Γιατί δεν πεθαίνει εντελώς?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3404.aspx</link><pubDate>Sat, 09 Jul 2005 19:36:37 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3404</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3404.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=3404</wfw:commentRss><description>&lt;font style="BACKGROUND-COLOR: #efefef"&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;Οι φόρμες είναι objects που δεν είναι ThreadSafe και αυτό πρακτικά σημαίνει ότι πειράζουμε τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;controls&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;της φόρμας αποκλειστικά και μόνο από το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;thread&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;από το οποίο δημιουργήθηκε η φόρμα. Είναι ο απόλυτος κανόνας που πρέπει να τηρείται με θρησκευτική ευλάβεια. Αν παραβιαστεί αυτός ο κανόνας ότι το πρόβλημα είναι ότι δημιουργούνται καταστάσεις απροσδιοριστίας που σε ότι αφορά το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;debugging&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;είναι εφιάλτης μιας και δεν μπορεί πάντοτε να αναπαραχθεί το πρόβλημα. Ένα&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-GB; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;μικρό&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-GB; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;παράδειγμα&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-GB; mso-bidi-font-size: 12.0pt"&gt;:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;Form1.Textbox1.Text=”test”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;Messagebox.Show(Form1.Textbox1.Text)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;Τι θα βγει στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;MessageBox&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; αν παραβιαστεί ο κανόνας? «&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;Test&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;»? Όχι… Άγνωστο! Γιατί από την στιγμή που κάνεις &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;assign&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;text&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;property&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;μέχρι την στιγμή που το ξαναδιαβάζεις, μπορεί κάποιος άλλος (από άλλο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;thread&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;) να έχει προλάβει κα να γράψει τη δική του τιμή. Γι αυτό η χρήση &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;threads&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;θέλει πολύ προσοχή, θέλει καλό διάβασμα της θεωρίας και θέλει διπλούς και τριπλούς ελέγχους για την ορθότητα του κώδικα.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;Ως, προς το πρόβλημά σου, γιατί δεν δηλώνεις στην καλούμενη φόρμα ένα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;property&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;στο οποίο θα περνάς ένα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;reference&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;της καλούσας φόρμας πριν το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;show;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt; Με αυτόν τον τρόπο θα μπορείς να «βγεις» από&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;την καλούμενη φόρμα πίσω στην καλούσα. Δοκίμασε αυτή τη τεχνική πριν φτάσεις στην λύση των &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt"&gt;threads&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt"&gt;…&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Re: Φορμα Συνδεδεμένη Με Thread.Γιατί δεν πεθαίνει εντελώς?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3403.aspx</link><pubDate>Sat, 09 Jul 2005 18:55:59 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3403</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3403.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=3403</wfw:commentRss><description>@Kelman&lt;br /&gt; Εάν, ενώ τρέχεις μια φόρμα, προσπαθήσεις να σηκώσεις μια άλλη(newForm.show()), τότε η καινούρια παίρνει το control και δεν μπορείς να γυρίσεις στην καλούσα όσο η νέα είναι ανοικτή(ή τουλάχιστο εγώ δεν μπόρεσα να βρώ έναν τρόπο &lt;img src="/forums//emoticons/emotion-10.gif" alt="Embarrassed" /&gt;). &lt;br /&gt; Πρέπει να κλείσεις την νέα φόρμα για να επανέρθει το control στην καλούσα. &lt;br /&gt; &lt;br /&gt; Για να το αποφύγω αυτό, φτοιάχνω ένα thread που καλεί την νέα φόρμα και έτσι μπορώ να την περάσω στο background ή να την προσπελάσω κατά βούληση.&lt;br /&gt; Είναι επικίνδυνο αυτό?&lt;br /&gt; &lt;br /&gt; @Aris &lt;br /&gt; Το thread το κλείνει η dispose() υποτίθεται?&lt;br /&gt;</description></item><item><title>Re: Φορμα Συνδεδεμένη Με Thread.Γιατί δεν πεθαίνει εντελώς?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3400.aspx</link><pubDate>Sat, 09 Jul 2005 05:14:38 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3400</guid><dc:creator>Aris</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3400.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=3400</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Δες τον παρακάτω κώδικα (με εμβόλιμα σχόλια) που υλοποιεί splash screen σε άλλο thread, και προσάρμοσε αναλόγως. Επίσης, δείχνει πως να "σκοτώσουμε" την εφαρμογή στον constructor της κύριας φόρμας (χωρίς &lt;font face="Courier New"&gt;try/catch&lt;/font&gt; γύρω από το &lt;font face="Courier New"&gt;Application.Run &lt;/font&gt;και &lt;font face="Courier New"&gt;Application.Exit&lt;/font&gt; [δεν έχουμε λόγο να "φάμε" exception, αν μπορούμε να το αποφύγουμε ..&lt;img src="/forums//emoticons/emotion-11.gif" alt="Cool" /&gt;]).&lt;br /&gt;&lt;br /&gt;Για να τρέξεις τον κώδικα χρειάζεσαι ένα SQL Server με την Northwind. Η φυσιολογική συμπεριφορά γίνεται με τον server να τρέχει και η "προβληματική" με σταματημένο (να μήν μπορεί να φορτώσει τα δεδομένα).&lt;br /&gt;&lt;br /&gt;Προσάρμοσε αναλόγως &lt;img src="/forums//emoticons/emotion-6.gif" alt="Sad" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre class="source"&gt;&lt;table border="0" cellspacing="0" width="100%"&gt;&lt;tr&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey" width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey"&gt;&lt;br&gt;&lt;font face="Lucida Console, Courier" size="2"&gt; &lt;p&gt;using System;&lt;br/&gt;using System.Drawing;&lt;br/&gt;using System.Collections;&lt;br/&gt;using System.ComponentModel;&lt;br/&gt;using System.Windows.Forms;&lt;br/&gt;using System.Data;&lt;/p&gt; &lt;p&gt;namespace Splash&lt;br/&gt;{&lt;br/&gt;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;br/&gt;&amp;nbsp;/// Summary description for Form1.&lt;br/&gt;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;&amp;nbsp;public class Form1 : System.Windows.Forms.Form&lt;br/&gt;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;private System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;&lt;br/&gt;&amp;nbsp;&amp;nbsp;private System.Windows.Forms.DataGrid dataGrid1;&lt;br/&gt;&amp;nbsp;&amp;nbsp;private System.Data.DataSet dataSet1;&lt;br/&gt;&amp;nbsp;&amp;nbsp;private System.Data.SqlClient.SqlCommand sqlSelectCommand1;&lt;br/&gt;&amp;nbsp;&amp;nbsp;private System.Data.SqlClient.SqlConnection sqlConnection2;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// Required designer variable.&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;private System.ComponentModel.Container components = null;&lt;br/&gt;&lt;br/&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;font face="Verdana" size="2"&gt;Εδώ, είναι το πρώτο κομμάτι από αυτά που χρειαζόμαστε:&lt;br /&gt;- μία μεταβλήτή για το instance της splash&lt;br /&gt;- ένα import για την PostMessage&lt;br /&gt;- η τιμή (constant) του WM_CLOSE&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellspacing="0" width="100%"&gt;&lt;tr&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey" width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey"&gt;&lt;br&gt;&lt;font face="Lucida Console, Courier" size="2"&gt; &lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;&amp;nbsp;&amp;nbsp;// SPECIAL STUFF NEEDED&lt;br/&gt;&amp;nbsp;&amp;nbsp;private static splash spl = null;&lt;br/&gt;&amp;nbsp;&amp;nbsp;[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]&lt;br/&gt;&amp;nbsp;&amp;nbsp;static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);&lt;br/&gt;&amp;nbsp;&amp;nbsp;private const UInt32 WM_CLOSE = 0x0010;&lt;/font&gt;&lt;/p&gt; &lt;/font&gt;&lt;br&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;font face="Verdana" size="2"&gt;Εδώ έχουμε τον constructor της κύριας φόρμας.&lt;br /&gt;Ξεκινάει την splash, και μετά προσπαθεί (try/catch) να φορτώσει και να δείξει τον πίνακα Orders&lt;br /&gt;από την Northwind. Εάν κάτι πάει στραβά, κρατάει το μήνυμα λάθους.&lt;br /&gt;Εάν φορτώσει σωστά, κάνει και μία μικρή καθυστέρηση για να φανεί αρκετά η splash&lt;img src="/forums//emoticons/emotion-1.gif" alt="Smile" /&gt;.&lt;br /&gt;Στο finally, κλείνει την Splash (η KillMe είναι μία γραμμή, &lt;font face="Courier New"&gt;this.Close();&lt;/font&gt;&lt;font face="Verdana"&gt; ορισμένη στην splash).&lt;br /&gt;Εάν προέκυψε λάθος, το δείχνει και στέλνει στον εαυτό της το WM_CLOSE, ώστε το Message loop&lt;br /&gt;που ξεκίνησε στην main να τερματίσει.&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;p&gt;&lt;table border="0" cellspacing="0" width="100%"&gt;&lt;tr&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey" width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey"&gt;&lt;br&gt;&lt;font face="Lucida Console, Courier" size="2"&gt;&lt;br/&gt;&lt;font color="#006400"&gt;&amp;nbsp;public Form1()&lt;br/&gt;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Required for Windows Form Designer support&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;/font&gt;&lt;/p&gt;&lt;font color="#006400"&gt; &lt;/font&gt;&lt;p&gt;&lt;font color="#006400"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;string err = null;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.DoSplash();&lt;/font&gt;&lt;/p&gt;&lt;font color="#006400"&gt; &lt;/font&gt;&lt;p&gt;&lt;font color="#006400"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.sqlDataAdapter1.Fill(this.dataSet1);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.DataMember = "Orders";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.Update();&lt;/font&gt;&lt;/p&gt;&lt;font color="#006400"&gt; &lt;/font&gt;&lt;p&gt;&lt;font color="#006400"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// simple delay&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime begin = DateTime.Now;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime end = begin.AddSeconds(3);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp; (end &amp;gt;= DateTime.Now);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch (System.Exception ex)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;err = ex.Message;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;spl.Invoke(new MethodInvoker(spl.KillMe));&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;spl.Dispose();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;spl = null;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (err != null) &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(null, err, "Something bad at startup", MessageBoxButtons.OK, MessageBoxIcon.Stop);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Post WM_CLOSE to self and let the pump handle it&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PostMessage(this.Handle, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// Clean up any resources being used.&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;protected override void Dispose( bool disposing )&lt;br/&gt;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( disposing )&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (components != null) &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;components.Dispose();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.Dispose( disposing );&lt;br/&gt;&amp;nbsp;&amp;nbsp;}&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;#region Windows Form Designer generated code&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// Required method for Designer support - do not modify&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// the contents of this method with the code editor.&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;private void InitializeComponent()&lt;br/&gt;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.sqlConnection2 = new System.Data.SqlClient.SqlConnection();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1 = new System.Windows.Forms.DataGrid();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataSet1 = new System.Data.DataSet();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.SuspendLayout();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// sqlDataAdapter1&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.sqlDataAdapter1.SelectCommand = this.sqlSelectCommand1;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.sqlDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {&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;&amp;nbsp;&amp;nbsp; new System.Data.Common.DataTableMapping("Table", "Orders", new System.Data.Common.DataColumnMapping[] {&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("OrderID", "OrderID"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("CustomerID", "CustomerID"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("EmployeeID", "EmployeeID"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("OrderDate", "OrderDate"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("RequiredDate", "RequiredDate"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("ShippedDate", "ShippedDate"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("ShipVia", "ShipVia"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("Freight", "Freight"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("ShipName", "ShipName"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("ShipAddress", "ShipAddress"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("ShipCity", "ShipCity"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("ShipRegion", "ShipRegion"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("ShipPostalCode", "ShipPostalCode"),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new System.Data.Common.DataColumnMapping("ShipCountry", "ShipCountry")})});&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// sqlSelectCommand1&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.sqlSelectCommand1.CommandText = "SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate, ShippedDate, Shi" +&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"pVia, Freight, ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, Ship" +&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"Country FROM Orders";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.sqlSelectCommand1.Connection = this.sqlConnection2;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// sqlConnection2&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.sqlConnection2.ConnectionString = "workstation id=\"HOME-ARIS\";packet size=4096;integrated security=SSPI;data source=" +&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"\".\";persist security info=False;initial catalog=Northwind";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// dataGrid1&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.DataMember = "";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.DataSource = this.dataSet1;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.Dock = System.Windows.Forms.DockStyle.Fill;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.Location = new System.Drawing.Point(0, 0);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.Name = "dataGrid1";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.ParentRowsVisible = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.ReadOnly = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.Size = new System.Drawing.Size(760, 566);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataGrid1.TabIndex = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// dataSet1&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataSet1.DataSetName = "NewDataSet";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.dataSet1.Locale = new System.Globalization.CultureInfo("el-GR");&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Form1&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.ClientSize = new System.Drawing.Size(760, 566);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.Controls.Add(this.dataGrid1);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.Name = "Form1";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.Text = "Form1";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.ResumeLayout(false);&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;#endregion&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// The main entry point for the application.&lt;br/&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;[STAThread]&lt;br/&gt;&amp;nbsp;&amp;nbsp;static void Main() &lt;br/&gt;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Application.Run(new Form1());&lt;br/&gt;&amp;nbsp;&amp;nbsp;}&lt;/p&gt; &lt;p&gt;&lt;font color="#000080"&gt;&amp;nbsp;&amp;nbsp;private static void StartSplash() &lt;br/&gt;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;spl = new splash();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Application.Run(spl);&lt;br/&gt;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/p&gt;&lt;font color="#000080"&gt; &lt;/font&gt;&lt;p&gt;&lt;font color="#000080"&gt;&amp;nbsp;&amp;nbsp;private static System.Threading.Thread splThread = null;&lt;br/&gt;&amp;nbsp;&amp;nbsp;private void DoSplash() &lt;br/&gt;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.Show();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.Update();&lt;/font&gt;&lt;/p&gt;&lt;font color="#000080"&gt; &lt;/font&gt;&lt;p&gt;&lt;font color="#000080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;splThread = new System.Threading.Thread(new System.Threading.ThreadStart( Form1.StartSplash));&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;splThread.Start();&lt;br/&gt;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/p&gt;&lt;font color="#000080"&gt; &lt;/font&gt;&lt;p&gt;&lt;font color="#000080"&gt;&amp;nbsp;}&lt;br/&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/pre&gt; &lt;p&gt;Η DoSplash δείχνει την κύρια φόρμα και μετά ξεκινάει ένα thread (Σημείωση: η μεταβλητή - splThread - δεν χρειάζεται να είναι private static, θα μπορούσε να είναι και εσωτερική στην DoSplash. Την άφησα έτσι για να δοκιμάσω κάποια πράγματα ..).&lt;br /&gt;&lt;br /&gt;Τέλος, η StartSplash (που χρησιμοποιείται για να ξεκινήσει το άλλο Thread καλεί την &lt;font face="Courier New"&gt;Application.Run&lt;/font&gt; για την splash. Αυτό γιατί &lt;font color="#000080"&gt;έχουμε δύο GUI Threads, με χωριστά Message loop&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;Άρης&lt;br /&gt;&lt;/p&gt;&lt;/font&gt;</description></item><item><title>Re: Φορμα Συνδεδεμένη Με Thread.Γιατί δεν πεθαίνει εντελώς?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3399.aspx</link><pubDate>Sat, 09 Jul 2005 03:06:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3399</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3399.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=3399</wfw:commentRss><description>Τι εννοείς όταν λες να "εναλλάσσεις"; Είναι λίγο επικίνδυνα αυτά τα πράγματα...</description></item><item><title>Φορμα Συνδεδεμένη Με Thread.Γιατί δεν πεθαίνει εντελώς?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3396.aspx</link><pubDate>Sat, 09 Jul 2005 02:08:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3396</guid><dc:creator>pontifikas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3396.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=3396</wfw:commentRss><description>Φτοιάχνω ένα thread και με αυτό σηκώνω μια Form από μια άλλη. Αυτό το κάνω για να μπορώ να εναλλάσσω μεταξύ της φόρμας αυτής και της καλούσας.&lt;br /&gt; &lt;br /&gt; Όταν όμως την σκοτώνω, ενώ πράγματι πεθαίνει, το task εξακολουθεί να παραμένει στο taskbar των Windoze και πρέπει να κάνω κλικ επάνω του για να εξαφανιστεί και αυτό.&lt;br /&gt; &lt;br /&gt; Πώς γίνεται να το εξαφανίζω μόλις σκοτώνω την φόρμα?&lt;br /&gt; &lt;br /&gt; Για να κλείσω το thread χρησιμοποιώ&lt;br /&gt; &lt;br /&gt; thr.Abort();&lt;br /&gt; thr = null;&lt;br /&gt;</description></item></channel></rss>