<?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>Απ: Πως να προφορτώσω τα dataset ώστε να κάνω την εφαρμογή μου πιο γρήγορη</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/67701.aspx</link><pubDate>Mon, 10 Oct 2011 05:16:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:67701</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/67701.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=67701</wfw:commentRss><description>Θα πρέπει να χρησιμοποιήσεις κάποιο &amp;nbsp;profiler όπως τον Performance Analyzer που υπάρχει στις μεγαλύτερες εκδόσεις του Visual Studio, το &lt;a href="http://www.jetbrains.com/profiler/"&gt;dotTrace&amp;nbsp;&lt;/a&gt;&amp;nbsp;της Jetbrains ή κάποιο άλλο.&amp;nbsp;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Συνήθως όμως τέτοια προβλήματα φαίνονται "δια γυμνού οφθαλμού". Αν έχεις βάλει πάρα πολλά components, ή αν η Initialize που έφτιαξες κάνει περίεργα πράγματα, φαίνεται αμέσως. Πολλές φορές ο profiler απλά επιβεβαιώνει αυτό που υποψιαζόσουν από την αρχή.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Να σημειώσω επίσης ότι η χρήστη threads και backgroundworkers ΔΕΝ σημαίνει ότι η εφαρμογή θα πάει πιο γρήγορα. Αν δεν καταλαβαίνεις τί συμβαίνει μπορείς να προκαλέσεις πολύ μεγαλύτερη καθυστέρηση, π.χ. προκαλώντας blocks μεταξύ των thread ή γεμίζοντας τη μνήμη πολύ γρηγορότερα απ' ότι μπορεί να ανταπεξέλθει η εφαρμογή. Το σίγουρο είναι ότι θα αυξήσεις κατά πολύ την πολυπλοκότητα της εφαρμογής σου.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αν μείνουμε στο παράδειγμα του Libra Storm, η εμφανέστατη πολυπλοκότητα κρύβει το ότι ο κώδικας δεν κάνει αυτό που θέλουμε: ΔΕΝ γεμίζει πιο γρήγορα το dataset με τιμές από τη βάση αλλά απλά προσθέτει μία-μία γραμμές. Τα δεδομένα όμως έρχονται από τη βάση με τη μία σε μορφή dataset οπότε ο κώδικας αυτός δεν θα βοηθούσε σε τίποτε. Αν όντως χρειάζεται το ασύγχρονο φόρτωμα των δεδομένων υπάρχουν άλλες τεχνικές και άλλα components.&lt;/div&gt;</description></item><item><title>Απ: Πως να προφορτώσω τα dataset ώστε να κάνω την εφαρμογή μου πιο γρήγορη</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/67699.aspx</link><pubDate>Mon, 10 Oct 2011 04:32:44 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:67699</guid><dc:creator>v.charalab</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/67699.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=67699</wfw:commentRss><description>Βασικά παίζοντας με threads, backroundworkes και τον χρόνο&amp;nbsp;απόκρισης&amp;nbsp;της εφαρμογής, παρατήρησα ότι δεν ήταν το "βαρύ"&amp;nbsp;dataset το πρόβλημα μου, αλλά το Initialize() της εκάστοτε βαριάς (με πολλά componetns) φόρμας.&lt;div&gt;Το οποίο Initialize() παίρνει πολύ χρόνο την πρώτη φορά που καλώ ένα νέο Instance της φόρμας αυτής. Τη δεύτερη και έπειτα φορά σηκώνεται αμέσως.&lt;/div&gt;&lt;div&gt;Παρεμπιπτόντως, πως μπορώ να δω ακριβώς τι κάνει την εφαρμογή μου βαριά από την άποψη κατανάλωσης RAM?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ευχαριστώ πάρα πολύ για τις συμβουλές&lt;/div&gt;</description></item><item><title>Απ: Πως να προφορτώσω τα dataset ώστε να κάνω την εφαρμογή μου πιο γρήγορη</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/67696.aspx</link><pubDate>Mon, 10 Oct 2011 01:58:02 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:67696</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/67696.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=67696</wfw:commentRss><description>Μήπως πρέπει να ξεκινήσουμε από τα βασικά? ΓΙΑΤΙ θέλεις να φορτώσεις οποιοδήποτε "βαρύ" dataset στην εφαρμογή? Είναι πάρα πολύ σπάνιες οι περιπτώσεις που πραγματικά χρειάζεται μία εφαρμογή να τραβήξει μεγάλο όγκο δεδομένων στον client. Αντίθετα, είναι άπειρες οι εφαρμογές που τραβάνε δεδομένα χωρίς λόγο.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Τα πιο συχνά λάθη είναι τα παρακάτω:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Φορτώνω τα πάντα για να τα δείξω στο Grid&lt;/b&gt;. Είναι λάθος γιατί ο χρήστης θα δει το πολύ 30-50 εγγραφές τη φορά, ανάλογα με το μέγεθος της οθόνης. Χρησιμοποίησε το paging ή το virtualization που έχουν σχεδόν όλα τα grid για να φορτώσεις μόνο τα δεδομένα που χρειάζεσαι&lt;/li&gt;&lt;li&gt;&lt;b&gt;Θέλω να κάνω μαζικές επεξεργασίες &lt;/b&gt;πχ. για να βγάλω στατιστικά του μήνα. Αυτή η δουλειά δεν πρέπει να γίνεται ποτέ στον client αλλά στο server με sql statements, αν όχι σε ένα ξεχωριστό reporting database. Ο χρόνος που θέλουν τα δεδομένα για να φτάσουν στον client είναι συνήθως πολλαπλάσιος του χρόνου εκτέλεσης ενός query, όσο περίπλοκο κι αν είναι.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Νομίζω ότι έτσι θα πάει γρηγορότερα η εφαρμογή μου.&lt;/b&gt;&amp;nbsp;Προφανώς όχι. Αυτό μάλλον δείχνει ότι η εφαρμογή έχει άλλα προβλήματα και νομίζεις ότι θα λυθούν με το τοπικό caching των δεδομένων. Λύσε τα άλλα προβλήματα και μετά σκέψου το caching&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Να το πω αλλιώς. Εϊναι σχεδόν σίγουρο ότι δεν χρειάζεται να φορτώσεις πολλά δεδομένα στο ξεκίνημα. Τί προσπαθείς να κάνεις και που νομίζεις ότι χρειάζεσαι τα πολλά δεδομένα? Και πόσα είναι αυτά τα δεδομένα σε KB, αριθμό γραμμών?&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Απ: Πως να προφορτώσω τα dataset ώστε να κάνω την εφαρμογή μου πιο γρήγορη</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/67685.aspx</link><pubDate>Sun, 09 Oct 2011 07:54:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:67685</guid><dc:creator>Libra Storm</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/67685.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=67685</wfw:commentRss><description>&lt;p&gt;Αυτό το μύνημα δεν το έχω ξαναδεί αλλά το να "σπάσεις" το φόρτωμα γίνεται με&amp;nbsp;πάρα πολλούς τρόπους, με threads, backgroundworker (όπως είπε ο και ο Συνάδελφος), με tasks κλπ κλπ. μπορείς επίσης και να το κάνεις με asynchronous calls τα οποία στη ουσία είναι threads και αυτά. Δες αν θές το παρακάτω παράδειγμα είναι σε VB (δεν είδα το C# λόγω φανατισμού&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-3.gif" alt="Surprise" /&gt;). Φορτώνει ένα datatable στη μνήμη ενώ τρέχει η εφαρμογή και γεμίζει επίσης και ένα listview χωρίς να "παγώνει" την φόρμα.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table border="0" cellSpacing="0" cellPadding="0" width="100%"&gt;&lt;tr style="line-height:normal;vertical-align:top;"&gt;&lt;td style="width:40px;text-align:right;"&gt;&lt;pre style="margin:0px;padding:2px;color:gray;font-family:courier new;font-size:11px;border-right-width:1px;border-right-style:solid;"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 &lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style="margin:0px;padding:2px 2px 2px 8px;"&gt;&lt;span style="color:black;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Class&lt;/span&gt; Form1
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Private&lt;/span&gt; _lv &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; ListView

    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt; Form1_Load(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Object&lt;/span&gt;, &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Handles&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Me&lt;/span&gt;.Load
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Dim&lt;/span&gt; a &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;New&lt;/span&gt; Func(Of DataTable)(&lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;AddressOf&lt;/span&gt; LoadData)

        _lv &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;New&lt;/span&gt; ListView &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;With&lt;/span&gt; {.Name &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Listview1"&lt;/span&gt;, .View &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; View.Details, .Dock &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; DockStyle.Fill, .GridLines &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;True&lt;/span&gt;}

        _lv.Columns.&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Add&lt;/span&gt;(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"ID"&lt;/span&gt;)
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Me&lt;/span&gt;.Controls.&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Add&lt;/span&gt;(_lv)

        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Me&lt;/span&gt;.SetText(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Retrieving Data"&lt;/span&gt;)

        _lv.BeginUpdate()

        &lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;' Ο κώδικας του method LoadData θα τρέξει σε άλλο thread&lt;/span&gt;
        &lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;' δεν είναι απαραίτητο το AddressOf CallBack.&lt;/span&gt;
        a.BeginInvoke(&lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;AddressOf&lt;/span&gt; CallBack, &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Nothing&lt;/span&gt;)

        MessageBox.Show(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Do something else while retrieving data."&lt;/span&gt;)
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt;

    &lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;' αυτό το function δεν τρέχει στο κύριο thread αλλά σε νέο.&lt;/span&gt;
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Function&lt;/span&gt; LoadData() &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; DataTable
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Dim&lt;/span&gt; r &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; DataRow
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Dim&lt;/span&gt; dt &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; DataTable &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;New&lt;/span&gt; DataTable(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"BigTable"&lt;/span&gt;)

        dt.Columns.&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Add&lt;/span&gt;(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"ID"&lt;/span&gt;, &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;GetType&lt;/span&gt;(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Integer&lt;/span&gt;))

        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;For&lt;/span&gt; i &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Integer&lt;/span&gt; &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; 1 &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;To&lt;/span&gt; 1000000
            r &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; dt.NewRow : r.&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Item&lt;/span&gt;(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"ID"&lt;/span&gt;) &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; i : dt.Rows.&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Add&lt;/span&gt;(r)
            &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;If&lt;/span&gt; i &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Mod&lt;/span&gt; 100 &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; 0 &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Then&lt;/span&gt;
                &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Me&lt;/span&gt;.SetText(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Retrieving "&lt;/span&gt; &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;+&lt;/span&gt; i.ToString &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;+&lt;/span&gt; &lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;" records."&lt;/span&gt;)
            &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;If&lt;/span&gt;
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Next&lt;/span&gt;

        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Return&lt;/span&gt; dt
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Function&lt;/span&gt;

    &lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;' Όταν τελειώσει το Async καλεί αυτό το function (δεν τρέχει στο κυρίως thread).&lt;/span&gt;
    &lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;' Δεν είναι απαραίτητο να το κάνεις αυτό απλά να ξέρεις ότι υπάρχει.&lt;/span&gt;
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt; CallBack(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;ByVal&lt;/span&gt; IAsync &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; IAsyncResult)
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Dim&lt;/span&gt; result &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; Runtime.Remoting.Messaging.AsyncResult &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;CType&lt;/span&gt;(IAsync, Runtime.Remoting.Messaging.AsyncResult)
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Dim&lt;/span&gt; func &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; Func(Of DataTable) &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;CType&lt;/span&gt;(result.AsyncDelegate, Func(Of DataTable))
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Dim&lt;/span&gt; dt &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; DataTable &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; func.EndInvoke(result)
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Dim&lt;/span&gt; i &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Integer&lt;/span&gt;

        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;For&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Each&lt;/span&gt; r &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; DataRow &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;In&lt;/span&gt; dt.Rows
            i += 1

            &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;If&lt;/span&gt; i &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Mod&lt;/span&gt; 100 &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; 0 &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Then&lt;/span&gt; &lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;' κάθε 100 εγγραφές γέμιζε το listview.&lt;/span&gt;
                _lv.Invoke(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;New&lt;/span&gt; Action(Of &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;String&lt;/span&gt;)(&lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;AddressOf&lt;/span&gt; fillRow), &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;CType&lt;/span&gt;(r.&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Item&lt;/span&gt;(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"ID"&lt;/span&gt;), &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;String&lt;/span&gt;))
            &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;If&lt;/span&gt;
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Next&lt;/span&gt;

        _lv.Invoke(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;New&lt;/span&gt; Action(&lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;AddressOf&lt;/span&gt; EndUpdate))
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt;

    &lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;' Μπες στο κύριο thread.&lt;/span&gt;
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt; fillRow(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;ByVal&lt;/span&gt; text &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;String&lt;/span&gt;)
        _lv.Items.&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Add&lt;/span&gt;(text)

        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Me&lt;/span&gt;.SetText(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Filling Listview with a sample of "&lt;/span&gt; &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;+&lt;/span&gt; _lv.Items.&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Count&lt;/span&gt;.ToString &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;+&lt;/span&gt; &lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;" records."&lt;/span&gt;)
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt;

    &lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;' Έλεγξε αν χρειάζεται invoke ή όχι.&lt;/span&gt;
    &lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;' Δηλαδή είμαι στο thread που πρέπει να καλέσω απλά σαν function ή πρέπει να "πάω" εκεί;&lt;/span&gt;
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt; SetText(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;ByVal&lt;/span&gt; text &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;As&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;String&lt;/span&gt;)
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;If&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Me&lt;/span&gt;.InvokeRequired &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Then&lt;/span&gt;
            &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Me&lt;/span&gt;.Invoke(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;New&lt;/span&gt; Action(Of &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;String&lt;/span&gt;)(&lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;AddressOf&lt;/span&gt; SetText), text)
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Else&lt;/span&gt;
            &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Me&lt;/span&gt;.Text &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; text
        &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;If&lt;/span&gt;
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt;

    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt; EndUpdate()
        _lv.EndUpdate()
        MessageBox.Show(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Finished."&lt;/span&gt;)
    &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Sub&lt;/span&gt;
&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;End&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;Class&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: Πως να προφορτώσω τα dataset ώστε να κάνω την εφαρμογή μου πιο γρήγορη</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/67680.aspx</link><pubDate>Sat, 08 Oct 2011 20:38:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:67680</guid><dc:creator>xdanger</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/67680.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=67680</wfw:commentRss><description>Γίνεται με backroundworker, μετά μπορείς να στείλεις τα δεδομένα στο
control είτε σιγά σιγά στο ProgressChanged ή μία και καλή στο completed
event.&lt;br&gt;


&lt;br&gt;


αν δεν ξέρεις πως να το χρησιμοποιήσεις δες εδώ http://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx</description></item><item><title>Πως να προφορτώσω τα dataset ώστε να κάνω την εφαρμογή μου πιο γρήγορη</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/67669.aspx</link><pubDate>Fri, 07 Oct 2011 21:23:10 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:67669</guid><dc:creator>v.charalab</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/67669.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=67669</wfw:commentRss><description>Καλησπέρα σε όλους,&lt;div&gt;&lt;br&gt;&lt;div&gt;Γίνεται κάπως την ώρα που ξεκινάει η εφαρμογή μου (C#) να φορτώσω τα βαριά datasets ώστε να μην εμφανίζεται το φαινόμενο του freezing όταν πάει κάποιος να ανοίξει μια συγκεκριμένη φόρμα που χρειάζεται αυτά τα βαριά datasets?&lt;/div&gt;&lt;div&gt;Έχω σκεφτεί να φορτώνω στο backgroung μια συγκεκριμένη βαριά φόρμα με ένα 2ο thread αλλά μου χτυπάει το εξής μήνυμα:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it.&lt;/div&gt;&lt;div&gt;Έχω δοκιμάσει με το&amp;nbsp;STAThreadAttribute που λέει πριν τη MAIN() αλλά τίποτα.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Γίνεται κάπως με ένα backgroundworker ίσως?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ευχαριστώ πολύ&lt;/div&gt;</description></item></channel></rss>