<?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>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49592.aspx</link><pubDate>Wed, 25 Mar 2009 04:37:11 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49592</guid><dc:creator>mixio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49592.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49592</wfw:commentRss><description>οκ, την ανεβασα &lt;a href="http://www.it.teithe.gr/~kontam"&gt;εδω&lt;/a&gt;&amp;nbsp;ενοτητα ip-over-dns.</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49587.aspx</link><pubDate>Wed, 25 Mar 2009 00:07:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49587</guid><dc:creator>mixio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49587.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49587</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Markos:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Η WaitOne() έχει &lt;a href="http://msdn.microsoft.com/en-us/library/system.threading.waithandle.waitone.aspx"&gt;τέσσερα&lt;/a&gt; oveloads. Αυτό που σε ρωτάει ο Μάνος (κι εγώ)&amp;nbsp;είναι γιατί αφού έτσι κι αλλιώς διαβάζεις το stream ασύγχρονα δεν το βγάζεις έξω από τον BackgroundWorker; Αν αποφασίσεις να το κάνεις με τον αρχικό σου τρόπο, τότε ρίξε μια ματιά στη &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.read.aspx"&gt;NetworkStream.Read()&lt;/a&gt; μιας και η BeginRead() εκτελείται κι αυτή ασύγχρονα. Φαντάζομαι ο Reader σου να έχει αντίστοιχη μέθοδο. Όπως επίσης και &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.readtimeout.aspx"&gt;ReadTimeout&lt;/a&gt; property.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Παιδια δε μπορω να παιξω με NetworkStream καθως αυτο δεχεται Socket. Εγω εχω ενα SafeFileHandle.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49586.aspx</link><pubDate>Tue, 24 Mar 2009 23:59:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49586</guid><dc:creator>mixio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49586.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49586</wfw:commentRss><description>Σιγουρα δεν εχω καταλαβει κατι αλλιως τωρα θα ειχα τελιωσει τα παντα μονος μου.&amp;nbsp;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Κατσε να σε εξηγησω πως δουλευει το μοντελο αυτο.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Το UI thread ξεκιναει τον backgroundWorker ο οποιος ξεκιναει ενα αλλο thread μεσα στο οποιο τρεχει το παρακατω:&lt;/div&gt;&lt;div&gt;(Ξεκιναω αυτο το 2ο thread για να μην παγωνει το UI που συνεχως ανανεωνεται.)&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (true)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IAsyncResult asyncResult = this.TunStream.BeginRead(ReadBuffer, 0, ReadBuffer.Length, asyncCallback, null);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bytesRead = this.TunStream.EndRead(asyncResult);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Eρωτηση. Πρεπει να γεμισει ολο το ReadBuffer για να τελιωσει η BeginRead;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Η ουσία είναι ότι ή θα κάνεις ReadAsync εκτός του BackgroundWorker ή sync read εντός του BackgroundWorker.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Η while πρεπει να διαβαζει συνεχεια την virtual device η οποια περιεχει IP packets. Πρεπει να περιμενει μεχρι να διαβασει ενα πακετο.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Θα μου πεις κανε sync read αφου ειναι να περιμενεις. Το προβλημα ειναι οτι παραλληλα με τις BeginRead τρεχει ενας timer που κανει καθε sec ενα BeginWrite.&lt;/div&gt;&lt;div&gt;Αν εκανα sync read τοτε θα μπλοκαρε ο timer και δεν θα γινονταν τα write παρα μονο οταν τελιωνε το read.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;(Στο DNS οταν στελνεις ενα query περιμενεις ενα response. &lt;b&gt;Αν ο nameserver εχει και αλλη πληροφορια να σου μεταδωσει πρεπει να εσυ να τον κανεις trigger&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;Αυτος ο timer κανει trigger τον nameserver και οτι επιπλεον πληροφορια του στελνει την κανει write στο virtual device.&lt;/div&gt;&lt;div&gt;Ετσι αν στο dns tunneling περιμενω να λαβω ενα IP packet αυτο θα ερθει σε κομματια που χωρανε σε Χ dns messages.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Το πρωτο κομματι θα μου ερθει κανονικα λογω του query που εστειλα αρχικα.&amp;nbsp;Αλλα για τα υπολοιπα κομματια πρεπει να κανω trigger τον nameserver.) &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ετσι κανω τα BeginWrite και BeginRead για να μην μπλοκαρει καποιο Read η Write.&lt;/div&gt;&lt;div&gt;Και αμα κανω&amp;nbsp;ReadAsync εκτός του BackgroundWorker ειπαμε θα παγωσει το GUI.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Νομιζω αν δεις τον κωδικα θα μπορεσεις να καταλαβεις καλυτερα τι γινεται.&lt;/div&gt;&lt;div&gt;Θα τον ανεβασω σημερα.&lt;/div&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49585.aspx</link><pubDate>Tue, 24 Mar 2009 23:29:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49585</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49585.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49585</wfw:commentRss><description>Η WaitOne() έχει &lt;A href="http://msdn.microsoft.com/en-us/library/system.threading.waithandle.waitone.aspx"&gt;τέσσερα&lt;/A&gt; oveloads. Αυτό που σε ρωτάει ο Μάνος (κι εγώ)&amp;nbsp;είναι γιατί αφού έτσι κι αλλιώς διαβάζεις το stream ασύγχρονα δεν το βγάζεις έξω από τον BackgroundWorker; Αν αποφασίσεις να το κάνεις με τον αρχικό σου τρόπο, τότε ρίξε μια ματιά στη &lt;A href="http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.read.aspx"&gt;NetworkStream.Read()&lt;/A&gt; μιας και η BeginRead() εκτελείται κι αυτή ασύγχρονα. Φαντάζομαι ο Reader σου να έχει αντίστοιχη μέθοδο. Όπως επίσης και &lt;A href="http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.readtimeout.aspx"&gt;ReadTimeout&lt;/A&gt; property.</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49584.aspx</link><pubDate>Tue, 24 Mar 2009 22:19:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49584</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49584.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49584</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;mixio:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;
&lt;DIV&gt;&lt;FONT class=Apple-style-span size=4&gt;&lt;SPAN style="FONT-SIZE:15px;" class=Apple-style-span&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT class=Apple-style-span size=4&gt;&lt;SPAN style="FONT-SIZE:15px;" class=Apple-style-span&gt;Ειμαι σε GUI και αν δεν τρεξω την ReadAsyncTun() σε αλλο thread θα παγωσει το GUI.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT class=Apple-style-span size=4&gt;&lt;SPAN style="FONT-SIZE:15px;" class=Apple-style-span&gt;Νομιζω δεν μπορει να εφαρμοστει αυτη η λυση. Πρεπει να διαβαζω ενα ολοκληρο IP packet μονομιας. Γι'αυτο και εχω το buffer λιγο παχουλο&amp;nbsp;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT class=Apple-style-span size=4&gt;&lt;SPAN style="FONT-SIZE:15px;" class=Apple-style-span&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;FONT class=Apple-style-span size=4&gt;&lt;SPAN style="FONT-SIZE:15px;" class=Apple-style-span&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Χμμμ... Συγνώμη και χωρίς να θέλω να σε προσβάλω αλλά&amp;nbsp;είσαι σίγουρος ότι έχεις καταλάβει πώς δουλεύει το Async μοντέλο; Γιατί από αυτά που λες μου φαίνεται δεν έχεις καταλάβει. Δεν σου είπα να μην χρησιμοποιήσεις asynchronous read, σου είπα να μην διαβάσεις όλη την πληροφορία με τη μία. Δεν έχει σχέση αυτό με το GUI, σε άλλο thread θα είσαι είτε διαβάσεις ανά byte, είτε διαβάσεις ανά MB. Η ουσία είναι ότι ή θα κάνεις ReadAsync εκτός του BackgroundWorker ή sync read εντός του BackgroundWorker. Και στις δύο περιπτώσεις κάνεις ένα read op μέσα σε κάποιο άλλο thread. Με την τεχνική που έγραψες στην αρχή, κάνεις read μέσα από ένα thread (αυτό που φτιάχνει η ReadAsync), που το ξεκινάς από ένα άλλο thread (που το φτιάχνει ο BackgroundWorker) που το ξεκινάει το thread του UI.&amp;nbsp;&amp;nbsp; &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Κάτσε όμως γιατί διάβασα ότι το buffer σου είναι για να πάρεις ένα IP Packet. Δηλαδή όλο αυτό το κάνεις για να διαβάσεις ένα IP Packet? Τι μέγεθος έχεις βάλει στο buffer? Και έρχεται ποτέ τίποτα ή περιμένει αιώνια να γεμίσει; ReceiveTimeout property έχει ο reader για να δοκιμάσεις;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Επίσης, το BeginRead με το EndRead δεν έχει νόημα να μπουν μαζί. Το &lt;A href="http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.endread.aspx"&gt;EndRead&lt;/A&gt; θα πρέπει να είναι μέσα στο asyncCallback delegate που περνάς στην &lt;A href="http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.beginread.aspx"&gt;BeginRead&lt;/A&gt;. Δες τα δύο links και υλοποίησε αυτήν την τεχνική.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49582.aspx</link><pubDate>Tue, 24 Mar 2009 21:37:09 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49582</guid><dc:creator>mixio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49582.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49582</wfw:commentRss><description>&lt;div&gt;&lt;font class="Apple-style-span" face="Arial"&gt;&lt;span class="Apple-style-span" style="font-size:medium;"&gt;Γεια και παλι και ευχαριστω για το ενδιαφερον. Να ενημερωσω πως μολις τελιωσω και αυτο το θεμα&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="Arial"&gt;&lt;span class="Apple-style-span" style="font-size:medium;"&gt;θα ανεβασω την πτυχιακη σε συνεννοηση με τον επιβλεποντα καθηγητη. Οποτε ο κωδικας θα ειναι διαθεσιμος&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="Arial"&gt;&lt;span class="Apple-style-span" style="font-size:medium;"&gt;και οποιος εχει ορεξη μπορει να στειλει καποιο patch-ακι. Οσοι βοηθησουν θα αναφερθουν&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="Arial"&gt;&lt;span class="Apple-style-span" style="font-size:medium;"&gt;στο site και μπορει και στην εργασια. Λογικα σε λιγο καιρο θα γινει και η παρουσιαση god damn.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="Arial" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:16px;"&gt;Προσπαθω να το κανω ως ενα open source community project.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="Arial" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:16px;"&gt;Να "εχεις" internet απο κλειδωμενα captive portals&amp;nbsp;δεν ειναι και κατι προσωπικο αλλα αφορα πολυ κοσμο.&amp;nbsp;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;gtas:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Φίλε μου mixio, προφανώς από ότι καταλαβαίνω, και θα έπρεπε η δουλειά σου να γινεται μέσα στο worker_DoWork.&lt;br&gt;&lt;br&gt;Στο Button Disconnect θα πρέπει να έχεις βάλει:&lt;br&gt;this.worker.CancelAsync();&lt;br&gt;&lt;br&gt;Και μέσα στο worker_DoWork:&lt;br&gt;if (worker.CancellationPending)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Cancel = true;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br&gt;}&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Ειχα δοκιμασει αυτον τον τροπο που περιγραφεις αλλα δε μου δουλεψε.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;KelMan:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Σωστά λέει ο Markos. Ανοίγεις το stream ασύγχρονα οπότε δεν χρειάζεσαι τον BackgroundWorker αφού έτσι κι αλλιώς τα data τα διαβάζει σε άλλο thread.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Αν διαβαστεί το stream λίγο-λίγο και όχι μονομιάς (δηλαδή μικρότερο buffer), μπορεί κάθε που γεμίζει το buffer να ελέγχει αν υπάρχει request για ακύρωση και να ακυρώνει το υπόλοιπο read.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Ειμαι σε GUI και αν δεν τρεξω την ReadAsyncTun() σε αλλο thread θα παγωσει το GUI.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Νομιζω δεν μπορει να εφαρμοστει αυτη η λυση. Πρεπει να διαβαζω ενα ολοκληρο IP packet μονομιας. Γι'αυτο και εχω το buffer λιγο παχουλο&amp;nbsp;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Markos:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Δεν ξέρω αν αυτό που σου προτείνω θα δουλέψει, αλλά ρίξε μια ματιά&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ms228975.aspx" style="text-decoration:none;"&gt;εδώ&lt;/a&gt;,&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ms228967.aspx" style="text-decoration:none;"&gt;εδώ&lt;/a&gt;&amp;nbsp;κι&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.remoting.messaging.asyncresult.asyncwaithandle.aspx" style="text-decoration:none;"&gt;εδώ&lt;/a&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Ειδα αυτα που λες και συγκρατησα το&amp;nbsp;&lt;b&gt;asyncResult.AsyncWaitHandle.WaitOne();&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Εγω αντι αυτου χρησιμοποιω το&amp;nbsp;&lt;b&gt;TunStream.EndRead(asyncResult);&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;και απο οτι διαβασα και τα δυο κανουν το ιδιο. Δηλαδη, μπλοκαρουν το I/O μεχρι αυτο να τελιωσει.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;Δε ξερω ποιο απο τα δυο ειναι πιο "σωστο" η οχι.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" size="4"&gt;&lt;span class="Apple-style-span" style="font-size:15px;"&gt;(Ελεος. Δειτε τι μου στειλε ενας φιλος στο msn την ωρα που ποσταρα.&amp;nbsp;www.missinternetgreece.com)&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49575.aspx</link><pubDate>Tue, 24 Mar 2009 17:33:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49575</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49575.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49575</wfw:commentRss><description>&lt;P&gt;Να προσθέσω ότι&amp;nbsp;το "λίγο-λίγο" async operation ακούγεται απλό αλλά είναι tricky... Μπορείς εύκολα να πέσεις σε stack overflow αν δεν κάνεις σωστή υλοποίηση.&lt;/P&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49573.aspx</link><pubDate>Tue, 24 Mar 2009 17:28:14 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49573</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49573.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49573</wfw:commentRss><description>&lt;P&gt;Ε νομίζω τα πράγμα είναι πιο απλά... Αν διαβαστεί το stream λίγο-λίγο και όχι μονομιάς (δηλαδή μικρότερο buffer), μπορεί κάθε που γεμίζει το buffer να ελέγχει αν υπάρχει request για ακύρωση και να ακυρώνει το υπόλοιπο read. Διαφορετικά πιθανότατα να λύνεται το πρόβλημα και με iterators.&lt;/P&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49569.aspx</link><pubDate>Tue, 24 Mar 2009 16:36:24 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49569</guid><dc:creator>Τάσκος Γιώργος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49569.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49569</wfw:commentRss><description>Προφανώς, προσπαθεί να κάνει από ότι κατάλαβα κάποιο workaround για να έχει την επιλογή της διακοπής,&lt;br&gt;αφου όμως δεν υποστηρίζεται κάτι τέτοιο από το .ΝΕΤ Framework, αλλά όμως υποστηρίζεται απο το Silverlight :P.&lt;br&gt;Ο μόνος τρόπος από ότι είδα είναι να γράψεις κάτι δικό σου για να το "αντικαταστήσεις" και να έχει την λειτουργία&lt;br&gt;που θέλεις.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49567.aspx</link><pubDate>Tue, 24 Mar 2009 16:07:44 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49567</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49567.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49567</wfw:commentRss><description>&lt;P&gt;Σωστά λέει ο Markos. Ανοίγεις το stream ασύγχρονα οπότε δεν χρειάζεσαι τον BackgroundWorker αφού έτσι κι αλλιώς τα data τα διαβάζει σε άλλο thread.&lt;/P&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49561.aspx</link><pubDate>Tue, 24 Mar 2009 04:20:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49561</guid><dc:creator>Τάσκος Γιώργος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49561.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49561</wfw:commentRss><description>Φίλε μου mixio, προφανώς από ότι καταλαβαίνω, και θα έπρεπε η δουλειά σου να γινεται μέσα στο worker_DoWork.&lt;br&gt;&lt;br&gt;Στο Button Disconnect θα πρέπει να έχεις βάλει:&lt;br&gt;this.worker.CancelAsync();&lt;br&gt;&lt;br&gt;Και μέσα στο worker_DoWork:&lt;br&gt;if (worker.CancellationPending)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Cancel = true;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br&gt;}&lt;br&gt;&lt;br&gt;[EDIT]: Ξέχασα, πρέπει λίγο να δείς και το result που περιμένεις να σου έρθει μήπως κάπου εκεί σου κρεμάει....&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49557.aspx</link><pubDate>Tue, 24 Mar 2009 04:01:24 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49557</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49557.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49557</wfw:commentRss><description>&lt;P&gt;Ας με διορθώσει κάποιος αν κάνω λάθος, αλλά εμένα μου μοιάζει να καλείς μία ασύγχρονη διαδικασία μέσα από το thread του backgroundworker. Το απλό CancelAsync() δε θα λειτουργήσει. Δεν ξέρω αν αυτό που σου προτείνω θα δουλέψει, αλλά ρίξε μια ματιά &lt;A href="http://msdn.microsoft.com/en-us/library/ms228975.aspx"&gt;εδώ&lt;/A&gt;, &lt;A href="http://msdn.microsoft.com/en-us/library/ms228967.aspx"&gt;εδώ&lt;/A&gt; κι &lt;A href="http://msdn.microsoft.com/en-us/library/system.runtime.remoting.messaging.asyncresult.asyncwaithandle.aspx"&gt;εδώ&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>Απ: Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49556.aspx</link><pubDate>Tue, 24 Mar 2009 03:17:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49556</guid><dc:creator>Johnnyxp64</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49556.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49556</wfw:commentRss><description>&lt;P&gt;πριν μηνες ειχα το "προβλημα" αυτο,&lt;/P&gt;&lt;P&gt;και μαλιστα επρεπε να βρω άμεσα λυση, αναγκαστηκα και σκευτηκα ενα workarround δεν ξερω αν πραγματικα υπαρχει καθαρα λυση σε αυτο αλλα λιγο που ψαχουλεψα δεν βρηκα.&lt;/P&gt;&lt;P&gt;οπως και να χει θα σου πω τι εκανα εγω τοτε. εβαλα ολο τον κωδικα και το background worker που θα εκανε την δουλεια που ηθελα σε νεο thread, σε μια τελειως διαφορετικη φορμα!&lt;/P&gt;&lt;P&gt;την ανοιγα κρυφη και ειχα Public οτι ηθελα να εχω προσβαση και τα εκτελουσα, οταν ηθελα να "σκοτωσω" το thread και αυτο ειχε κολησει σε WaitAsyncCancel=true λιγο πριν αρχησει η κατα την διαρκεια, εκανα αποπειρα σκοτωμου του thread και στο "καπακι" εκλεινα την form! ετσι οτι προερχοντας απο αυτη σχετικο thread (οπως ο BW) αμεσως σταματουσε και μπορουσα να το ξαναεκτελεσω άμεσα.&lt;/P&gt;&lt;P&gt;ειπαμε ηταν workarround οχι 100% solution, αλλα την δουλεια μου την εκανε σωστα και παρατηρουσα και μεσω του TaskManager αλλα και εννος αλλου utility τα threads εβλεπα οτι με το που εκλεινα την φορμα ακυρωνα και τον BGW οκ.&lt;/P&gt;&lt;P&gt;ελπιζω να σου δωσει κατι να ψαχτεις. αν υπαρχει αλλη ποιο "καθαρη" λυση που δουλευει Παντα θα ηθελα να την δω κι εγω.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;p.s. αντε κουραγιο μεχρι το Visual Studio 2010 και το .ΝΕΤ 4 με το εξυπνο Paralilism που θα εκμεταλευτουμε επιτελους τα μηχανηματα μας και θα σταματησουμε την ταλαιπωρεια με τα threads.&lt;/P&gt;</description></item><item><title>Cancel a pending async operation</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/49555.aspx</link><pubDate>Tue, 24 Mar 2009 03:06:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:49555</guid><dc:creator>mixio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/49555.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=49555</wfw:commentRss><description>Καλησπερα.&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;&amp;nbsp;&amp;nbsp; &amp;nbsp; worker = new BackgroundWorker();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; worker.DoWork += new DoWorkEventHandler(ReadAsynchTun);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; worker.WorkerSupportsCancellation = true;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; worker.RunWorkerAsync();&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ο worker θα φτιαξει ενα thread και μεσα σε αυτο τρεχει τον κωδικα της μεθοδου&amp;nbsp;ReadAsynchTun.&lt;/div&gt;&lt;div&gt;Η&amp;nbsp;ReadAsynchTun διαβαζει ενα stream ασυχρονα.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;while(true)&amp;nbsp;&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;IAsyncResult asyncResult = TunStream.BeginRead(ReadBuffer, 0, ReadBuffer.Length, asyncCallback, null);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int bytesRead = TunStream.EndRead(asyncResult);&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (worker.CancellationPending)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;break;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Εχω ενα κουμπι Disconnect. Οταν το παταω θελω o&amp;nbsp;worker&amp;nbsp;να ακυρωσει το thread οπου τρεχει τον παραπανω κωδικα.&lt;/div&gt;&lt;div&gt;Αυτο το κανω με το&amp;nbsp;worker.CancelAsync().&lt;/div&gt;&lt;div&gt;Αν και εκανα αιτηση διακοπης του thread αυτο μπαινει σε μια κατασταση αναμονης μεχρι να τελιωσει το ασυχρονο BeginRead.&lt;/div&gt;&lt;div&gt;Το προβλημα ειναι οτι οση ωρα δεν εχει να διαβασει τιποτα η BeginRead απο το stream το thread μενει σε αναμονη και στην ουσια hang-αρει&amp;nbsp;&lt;/div&gt;&lt;div&gt;η εφαρμογη.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Υπαρχει καποια κλασσικη λυση σε αυτο;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description></item></channel></rss>