<?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>Πρώτα Βήματα - Γλώσσες προγραμματισμού</title><link>https://www.dotnetzone.gr:443/cs/forums/74/ShowForum.aspx</link><description>Τα πρώτα βήματα στις γλώσσες VB6, VB.NET, και C#</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Progress Bar</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24172.aspx</link><pubDate>Mon, 29 Jan 2007 05:02:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24172</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24172.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=24172</wfw:commentRss><description>&lt;P&gt;Εννοείται ότι ανάλογα με το πόσο βαρύ είναι το κάθε iteration θα κάνεις και το αντίστοιχο refresh. Αν είναι βαρύ, δεν υπάρχει πρόβλημα να κάνεις refresh σε κάθε iteration. Κατά κανόνα όμως τα iterations είναι ελαφριά, με αποτέλεσμα τα συχνά DoEvents να προκαλούν μεγαλύτερη καθυστέρηση από το ίδιο το iteration. Είναι θέμα κρίσης του κάθε developer πόσο συχνά θέλει να κάνει update το progress bar.&lt;/P&gt;
&lt;P&gt;Εδώ που τα λέμε, δεν θα ήταν άσχημο ένα progress bar το οποίο θα μπορούσε να διαχειριστεί τόσο iterations όσο και μακροχρόνιες εργασίες, κάτι σαν το progress bar του Internet Explorer. Όταν μία σελίδα αργεί πολύ να κατέβει, το progress bar προχωράει πολύ αργά, αντί να σταματήσει εντελώς περιμένοντας το επόμενο πακέτο.&lt;/P&gt;</description></item><item><title>Απ: Progress Bar</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24158.aspx</link><pubDate>Mon, 29 Jan 2007 02:43:38 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24158</guid><dc:creator>Νατάσα Μανουσοπούλου</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24158.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=24158</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://62.1.45.162/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Επειδή όμως η DoEvents είναι ακριβή, καλύτερα να καλείται αραιά, πχ. κάθε 10ο iteration.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;Αυτό που λες Παναγιώτη είναι πολύ σωστό από την καθαρά τεχνική άποψη του ζητήματος, αλλά όσον αφορά την ψυχολογία του χρήστη, μπορεί να αξίζει τον κόπο η θυσία της επίδοσης στο βωμό της χρηστικότητας.&lt;br&gt;&lt;br&gt;Σε μια διαδικασία όπου οι επαναλήψεις είναι αργές (από δευτερόλεπτο και πάνω), ανανεώνοντας το UI κάθε 10 επαναλήψεις τελειώνεις πιο γρήγορα, αλλά δίνεις στο χρήστη την αίσθηση του αργού, κολλημένου προγράμματος. Αν όμως επωμιστείς το κόστος της DoEvents σε κάθε επανάληψη (ή αν οι επαναλήψεις είναι &amp;gt;5 sec πολλές φορές σε κάθε επανάληψη), τότε ο χρόνος ολοκλήρωσης της διαδικασίας θα είναι μεν μεγαλύτερος, αλλά ο χρήστης δε θα τον έχει αισθανθεί τόσο γιατί βλέπει την εφαρμογή να ανταποκρίνεται. Είναι πολύ σημαντικό να έχει ο χρήστης την εντύπωση ότι έχει τον έλεγχο αυτός και όχι ο υπολογιστής, ακόμα κι αν αυτό κοστίζει στα απόλυτα νούμερα. Ο άνθρωπος σπάνια αντιλαμβάνεται τη διαφορά ανάμεσα στα 60 και τα 80'', ενώ πολύ εύκολα καταλαβαίνει ότι η εφαρμογή δεν ανταποκρίνεται ακαρίαία (&amp;lt;1/10'').&lt;br&gt;</description></item><item><title>Απ: Progress Bar</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24138.aspx</link><pubDate>Sun, 28 Jan 2007 01:01:21 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24138</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24138.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=24138</wfw:commentRss><description>pantelee, δεν χρειάζεται να κάνεις μετατροπές για να θέσεις την τιμή του ProgressBar.Value, αν βάλεις Min=1 και Max=C. Μετά απλά θέτεις ProgressBar.Value=i&lt;br /&gt;
&lt;br /&gt;
Αντί για Refresh πάντως χρειάζεται το DoEvents. Ο λόγος είναι ότι εφόσον οι υπολογισμοί εκτελούνται στο thread της φόρμας, το UI θα μπλοκάρει μέχρι να τελειώσει ο υπολογισμός. Επειδή όμως η DoEvents είναι ακριβή, καλύτερα να καλείται αραιά, πχ. κάθε 10ο iteration.</description></item><item><title>Απ: Progress Bar</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24078.aspx</link><pubDate>Fri, 26 Jan 2007 17:15:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24078</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24078.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=24078</wfw:commentRss><description>&lt;P&gt;Το καλύτερο που θα μπορούσες να κάνεις, είναι να εκτελέσεις αυτούς τους υπολογισμούς ασύγχρονα. Δηλαδή το κύριο thread της εφαρμογής σου απλά θα δείχνει ένα progress bar να ανανενώνεται ενώ οι υπολογισμοί θα γίνονται σε ένα thread που θα τρέχει παράλληλα. Αν δεν ξέρεις πόσο θα διαρκέσει η διαδικασία υπολογισμού, είτε ποσοτικά πχ έχω να υπολογίσω 1500 αριθμούς, είτε χρονικά πχ διαρκεί 80 δευτερόλεπτα, τότε δεν υπάρχει τρόπος να ξεκινήσεις το progress bar και να γεμίζει παράλληλα με την πρόοδο της διαδικασίας σου. Απλά θα το γεμίσεις και όταν φτάνει στο τέλος θα το αδειάζεις και πάλι από την αρχή. Σε αυτές τις περιπτώσεις, γυρίζουμε το Style propertry του ProgressBar σε "Marquee", ώστε να είναι εμφανές ότι χρησιμοποιείται ως φουρφούρι (δηλαδή για να δείξει ότι το PC κάτι κάνει) και όχι πληροφοριακά για να μας δείξει σε πιο στάδιο της διαδικασίας είμαστε.&lt;/P&gt;
&lt;P&gt;Ρίξε μια ματιά σε αυτό το άρθρο σχετικά με ασύγχρονες διαδικασίες. Είναι σε vb.net αλλά με έναν converter μπορείς να γυρίσεις τα samples σε C#: &lt;A href="/cs/blogs/mkelaiditis/articles/10156.aspx"&gt;http://www.dotnetzone.gr/cs/blogs/mkelaiditis/articles/10156.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Στο Visual Studio 2005 έχουν προσθέσει ένα control που λέγεται BackgroundWorker το οποίο ουσιαστικά υλοποιεί πολλά από αυτά που λέει το άρθρο παραπάνω. Δες εδώ &lt;A href="http://msdn2.microsoft.com/en-us/library/b2zk6580(vs.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/b2zk6580(vs.80).aspx&lt;/A&gt; πως μπορείς να το χρησιμοποιήσεις σε συνδυασμό με ένα progress bar.&lt;/P&gt;</description></item><item><title>Απ: Progress Bar</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24075.aspx</link><pubDate>Fri, 26 Jan 2007 10:08:50 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24075</guid><dc:creator>pantelee</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24075.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=24075</wfw:commentRss><description>Κάτι τέτοιο μπορείς να κάνεις όταν γνωρίζεις το πλήθος των πράξεων που
θα εκτελεστούν. Το Progress Bar έχει τις ιδιότητες Min, Max και Value
που σε ενδιαφέρουν. Κάθε φορά που θα εκτελείται μία πράξη θα δίνεις
στην ιδιότητα Value τιμή ανάλογη με το πλήθος των πράξεων που έχουν
εκτελεστεί.&lt;br&gt;
&lt;br&gt;
Π.χ. αν έχεις ένα βρόγχο For-Next που καλείται C φορές&lt;br&gt;
For I = 1 to C&lt;br&gt;&amp;nbsp;&amp;nbsp;
  ...&lt;br&gt;&amp;nbsp;&amp;nbsp;
  (Πράξεις)&lt;br&gt;&amp;nbsp; ...&lt;br&gt;&amp;nbsp; PB.Value = ( I / C ) * (PB.Max - PB.Min) + PB.Min&lt;br&gt;
Next&lt;br&gt;
&lt;br&gt;
Ενώ σε επανάληψη με Do-Loop που δεν ξέρεις μετά από πόσα βήματα θα ολοκληρωθεί -φαντάζομαι ότι- δε γίνεται κάτι τέτοιο.&lt;br&gt;
&lt;br&gt;
Μάλλον θα χρειαστεί και κάποιο Refresh μετά από τη γραμμή PB.Value =
... για να γίνει ανανέωση της φόρμας και να εμφανιστεί η νέα τιμή του
Progress Bar.&lt;br&gt;
&lt;br&gt;
Edit:&lt;br&gt;
Τώρα πρόσεξα ότι αναφέρεσαι σε Visual C# 2005 ES. Οι παραπάνω γραμμές
αφορούν τη Visual Basic και δε γνωρίζω αν και κατα πόσο υπάρχει
συνάφεια μεταξύ αυτών.&lt;br&gt;</description></item><item><title>Απ: Progress Bar</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/20130.aspx</link><pubDate>Fri, 10 Nov 2006 17:02:09 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:20130</guid><dc:creator>nsouflis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/20130.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=20130</wfw:commentRss><description>Ρίξε αν θέλεις μιά ματιά στο ( &lt;a href="http://www.codeproject.com/cs/miscctrl/AdvancedProgressBar.asp"&gt;http://www.codeproject.com/cs/miscctrl/StatBarProgressPanel.asp&lt;/a&gt;) &lt;br&gt;
Είναι ένα status bar progress bar control . &lt;br&gt;Και αντίστοιχα στο ( &lt;a href="http://www.codeproject.com/cs/miscctrl/AdvancedProgressBar.asp"&gt;http://www.codeproject.com/cs/miscctrl/AdvancedProgressBar.asp&lt;/a&gt; ) &lt;br&gt;ένα πιο διαμορφώσιμο progress bar &lt;br&gt;
&lt;br&gt;</description></item><item><title>Απ: Progress Bar</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/20112.aspx</link><pubDate>Fri, 10 Nov 2006 01:12:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:20112</guid><dc:creator>Aggelos Biboudis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/20112.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=20112</wfw:commentRss><description>http://www.dynamicdrive.com/dynamicindex11/xpprogressbar.htm&lt;br /&gt;
&lt;br /&gt;
Δεν το έχω τσεκάρει, αλλα κοίταξε το μια. Θυμόμουν τι είχε κάνει μια φίλη μου σε μια εφαρμογή και ζήτησα το src. Νομίζω έχει και για .ΝΕΤ. Κοίταξε και πες μας.</description></item><item><title>Progress Bar</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/20110.aspx</link><pubDate>Fri, 10 Nov 2006 00:56:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:20110</guid><dc:creator>Saber</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/20110.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=20110</wfw:commentRss><description>Γειά σας,&lt;br&gt;&lt;br&gt;Στην εφαρμογή που ασχολούμαι τον τελευταίο καιρό, κάποια στιγμή χρειάζονται να γίνουν κάποιοι υπολογισμοί.&lt;br&gt;&lt;br&gt;Την ώρα που γίνονται οι υπολογισμοί, δεν κάνω τίποτα στη φόρμα, δηλαδή δεν πειράζω κανένα κουμπί.&lt;br&gt;&lt;br&gt;Κα8ώς κοίταζα τα Windows Forms Components, το μάτι μου έπεσε πάνω στην Progress Bar. Ξέρει κανείς πως χρησιμοποιείτε?&lt;br&gt;Ας πούμε να αρχίζει να γεμίζει όταν αρχίζουν οι υπολογισμοί και να σταματάει όταν παραχθεί αποτέλεσμα.&lt;br&gt;&lt;br&gt;Επίσης για να μην μπορεί κάποιος χρήστης να πειράξει την εφαρμογή, σκέφτομαι να βάλω ένα flag όταν αρχίζουν οι υπολογισμοί και να γίνετε false όταν σταματάνε. Όσο το flag είναι true, τα πεδία και τα κουμπιά στη φόρμα θα είναι Visible:False.&lt;br&gt;&lt;br&gt;Το αναπτύσσω σε Visual C# 2005 ES.&lt;br&gt;&lt;br&gt;Ευχαριστώ προκαταβολικά...&lt;br&gt;</description></item></channel></rss>