<?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>Threading Examble</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9027.aspx</link><pubDate>Mon, 30 Jan 2006 23:06:45 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9027</guid><dc:creator>imanos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9027.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=9027</wfw:commentRss><description>&lt;P&gt;Έτσι κουβέντα να γίνεται.&lt;/P&gt;
&lt;P&gt;Ένα απλό παράδειγμα για threading.&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Imports&lt;/FONT&gt;&lt;FONT size=2&gt; System&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Imports&lt;/FONT&gt;&lt;FONT size=2&gt; System.Drawing&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Imports&lt;/FONT&gt;&lt;FONT size=2&gt; System.Collections&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Imports&lt;/FONT&gt;&lt;FONT size=2&gt; System.ComponentModel&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Imports&lt;/FONT&gt;&lt;FONT size=2&gt; System.Threading&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT color=#808080&gt;#Region&amp;nbsp;WINDOWS GENERATE CODE&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;Public&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Class&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; Form1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Inherits&lt;/FONT&gt;&lt;FONT size=2&gt; System.Windows.Forms.Form&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;Private&lt;/FONT&gt; Thread1 &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; Thread 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Private&lt;/FONT&gt; Thread2 &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; Thread&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Private&lt;/FONT&gt; Thread3 &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; Thread&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Dim&lt;/FONT&gt; i, s, f &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Integer&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Sub&lt;/FONT&gt; TheThread1()&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Try&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;ProgressBar1.Minimum = 0&lt;/P&gt;
&lt;P&gt;ProgressBar1.Maximum = 100000&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;For&lt;/FONT&gt; i = 0 &lt;FONT color=#0000ff&gt;To&lt;/FONT&gt; 100000 &lt;FONT color=#0000ff&gt;Step&lt;/FONT&gt; 10&lt;/P&gt;
&lt;P&gt;Label1.Text = "Loading Record " + i.ToString() + " of 100000"&lt;/P&gt;
&lt;P&gt;ProgressBar1.Value = i&lt;/P&gt;
&lt;P&gt;Thread1.Sleep(1)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Next&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Catch&lt;/FONT&gt; exc &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; Exception&lt;/P&gt;
&lt;P&gt;MessageBox.Show(exc.ToString)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Try&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Sub&lt;/FONT&gt; TheThread2()&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Try&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;ProgressBar2.Minimum = 0&lt;/P&gt;
&lt;P&gt;ProgressBar2.Maximum = 100000&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;For&lt;/FONT&gt; s = 0 &lt;FONT color=#0000ff&gt;To&lt;/FONT&gt; 100000 &lt;FONT color=#0000ff&gt;Step&lt;/FONT&gt; 10&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Label2.Text = "Loading Record " + s.ToString() + " of 100000"&lt;/P&gt;
&lt;P&gt;ProgressBar2.Value = s&lt;/P&gt;
&lt;P&gt;Thread2.Sleep(1)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Next&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Catch&lt;/FONT&gt; exc &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; Exception&lt;/P&gt;
&lt;P&gt;MessageBox.Show(exc.ToString)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Try&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Sub&lt;/FONT&gt; TheThread3()&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Try&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;ProgressBar3.Minimum = 0&lt;/P&gt;
&lt;P&gt;ProgressBar3.Maximum = 100000&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;For&lt;/FONT&gt; f = 0 &lt;FONT color=#0000ff&gt;To&lt;/FONT&gt; 100000 &lt;FONT color=#0000ff&gt;Step&lt;/FONT&gt; 10&lt;/P&gt;
&lt;P&gt;Label3.Text = "Loading Record " + f.ToString() + " of 100000"&lt;/P&gt;
&lt;P&gt;ProgressBar3.Value = f&lt;/P&gt;
&lt;P&gt;Thread3.Sleep(1)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Next&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Catch&lt;/FONT&gt; exc &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; Exception&lt;/P&gt;
&lt;P&gt;MessageBox.Show(exc.ToString)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Try&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/FONT&gt; BtnStart_Click(&lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; sender &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; System.Object, &lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; e &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; System.EventArgs) &lt;FONT color=#0000ff&gt;Handles&lt;/FONT&gt; BtnStart.Click&lt;/P&gt;
&lt;P&gt;BtnPause.Enabled = &lt;FONT color=#0000ff&gt;True&lt;/FONT&gt; &lt;FONT color=#008000&gt;'Can now press the pause button.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;BtnStart.Enabled = &lt;FONT color=#0000ff&gt;False&lt;/FONT&gt; &lt;FONT color=#008000&gt;'Can't press start button again.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;'Declare threads as new threads.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;'Notice the Thread.New function only takes AddressOf, this is the address of the Sub basically.)&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Thread1 = &lt;FONT color=#0000ff&gt;New&lt;/FONT&gt; Threading.Thread(&lt;FONT color=#0000ff&gt;AddressOf&lt;/FONT&gt; TheThread1)&lt;/P&gt;
&lt;P&gt;Thread2 = &lt;FONT color=#0000ff&gt;New&lt;/FONT&gt; Threading.Thread(&lt;FONT color=#0000ff&gt;AddressOf&lt;/FONT&gt; TheThread2)&lt;/P&gt;
&lt;P&gt;Thread3 = &lt;FONT color=#0000ff&gt;New&lt;/FONT&gt; Threading.Thread(&lt;FONT color=#0000ff&gt;AddressOf&lt;/FONT&gt; TheThread3)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;If&lt;/FONT&gt; PrioritiesCheckbox.Checked = &lt;FONT color=#0000ff&gt;True&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Then&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;'Make their priorities different.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Thread1.Priority = Threading.ThreadPriority.Highest&lt;/P&gt;
&lt;P&gt;Thread2.Priority = Threading.ThreadPriority.Normal&lt;/P&gt;
&lt;P&gt;Thread3.Priority = Threading.ThreadPriority.Lowest&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Else&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Thread1.Priority = Threading.ThreadPriority.Normal&lt;/P&gt;
&lt;P&gt;Thread2.Priority = Threading.ThreadPriority.Normal&lt;/P&gt;
&lt;P&gt;Thread3.Priority = Threading.ThreadPriority.Normal&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;If&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;PrioritiesCheckbox.Enabled = &lt;FONT color=#0000ff&gt;False&lt;/FONT&gt; &lt;FONT color=#008000&gt;'Can't use this anymore.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;'Start running the threads.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;'Notice here that thread1 will start just before thread2. And so on.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Thread1.Start()&lt;/P&gt;
&lt;P&gt;Thread2.Start()&lt;/P&gt;
&lt;P&gt;Thread3.Start()&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/FONT&gt; BtnPause_Click(&lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; sender &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; System.Object, &lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; e &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; System.EventArgs) &lt;FONT color=#0000ff&gt;Handles&lt;/FONT&gt; BtnPause.Click&lt;/P&gt;
&lt;P&gt;BtnResume.Enabled = &lt;FONT color=#0000ff&gt;True&lt;/FONT&gt; &lt;FONT color=#008000&gt;'Can now press resume.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;'Temporarily suspends the threads.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Thread1.Suspend()&lt;/P&gt;
&lt;P&gt;Thread2.Suspend()&lt;/P&gt;
&lt;P&gt;Thread3.Suspend()&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/FONT&gt; Form1_Closing(&lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; sender &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Object&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; e &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; System.ComponentModel.CancelEventArgs) &lt;FONT color=#0000ff&gt;Handles&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;MyBase&lt;/FONT&gt;.Closing&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;'If threads are suspended, resume them and then abort.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;If&lt;/FONT&gt; Thread1.ThreadState = Threading.ThreadState.Suspended &lt;FONT color=#0000ff&gt;Then&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Thread1.Resume()&lt;/P&gt;
&lt;P&gt;Thread2.Resume()&lt;/P&gt;
&lt;P&gt;Thread3.Resume()&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;If&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;'Abort all threads.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Thread1.Abort()&lt;/P&gt;
&lt;P&gt;Thread2.Abort()&lt;/P&gt;
&lt;P&gt;Thread3.Abort()&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/FONT&gt; BtnResume_Click(&lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; sender &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; System.Object, &lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; e &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; System.EventArgs) &lt;FONT color=#0000ff&gt;Handles&lt;/FONT&gt; BtnResume.Click&lt;/P&gt;
&lt;P&gt;BtnResume.Enabled = &lt;FONT color=#0000ff&gt;False&lt;/FONT&gt; &lt;FONT color=#008000&gt;'Can't press it now.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;'Resume all threads.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Thread1.Resume()&lt;/P&gt;
&lt;P&gt;Thread2.Resume()&lt;/P&gt;
&lt;P&gt;Thread3.Resume()&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Sub&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;End Class&lt;/FONT&gt;&lt;/P&gt;</description></item></channel></rss>