Thread
in C# .Net………………………….
Before we start this topic we have to know about
differences b/w Multitasking Multiprocessing and Multi-Threading
Multitasking: Multitasking, in an operating system, is
allowing a user to perform more than one computer task (such as the operation
of an application program) at a time. For example Microsoft Windows 2000, IBM's
OS/390, and Linux etc.
Those operating
system which allow to perform single task at the same time is called Single tasking
operating system For example DOS (Disk Operating System)
These are
two types concept in Multitasking
1. Multi-Processing
2. Multi-Threading
Multiprocessing: computer system's ability to support more than
one process or program at the same time. Multiprocessing operating systems
enable several programs to run concurrently. UNIX is
one of the most widely used multiprocessing systems, but there are many others,
including Windows-Xp etc. Multiprocessing
systems are much more complicated than single-process systems because the
operating system must allocate resources to competing processes in a reasonable
manner.
It refers
to the utilization of multiple CPUs in a single computer system. This is also
called parallel processing
Multithreading:
A
thread is defined as the execution path of a program. You can define a unique
flow of control in a program using thread .Thread are used to run application
that perform large and complex computations. Other ways you can say Thread is
smallest unit of code that dispatched to C.P.U. for execution. If dispatched multiple
threads to C P U to run all thread parallel is call multithreading programming
For Example: CPU (Central
Processing Unit) performs various
complex tasks simultaneously .The
process include three different
tasks such as listening songs
with media player,inslalling software and
writing with ms office .All the process are handled by separate threads..
Single-Threaded
Application: A process that is executed using one
thread is known as a single-thread-process. A single-threaded application can
perform only one task at a time. Means you have wait for one task to complete
before another task can start.
Multi-Threaded
Application: A process that create two or more threads
is called multi-threaded-process
Threads vs. Processes: A thread is analogous
to the operating system process in which your application runs. Just as
processes run in parallel on a computer, threads run in parallel within a
single process. Processes are fully isolated from each other; threads have
just a limited degree of isolation. In particular, threads share (heap) memory
with other threads running in the same application. This, in part, is why
threading is useful: one thread can fetch data in the background, for instance,
while another thread can display the data as it arrives.
Thread
States: Life Cycle of a Thread
Thread has
one of several thread states this section discusses these states and the
transitions between states. Two classes critical for multithreaded applications
are Thread and Monitor (System. Threading namespace). This section also discusses
several methods of classes Thread and Monitor that cause state
transitions.
A new
thread begins its lifecycle in the Un-started state. The thread
remains in the Un-started state until the program calls Thread
method Start, which places the thread in the Started state
(sometimes called the Ready or Run able state) and immediately
returns control to the calling thread. Then the thread that invoked Start,
the newly Started thread and any other threads in the program execute
concurrently.
Type
of Several Thread State in C# .Net
·
UnStarted:
Thread is created within the common language run time but not started still.
·
Running:
After a Thread calls Start method
·
Wait/Sleep/Join:
After a Thread calls its wait or Sleep or Join method.
·
Resume: causes the suspended
Thread to resume its execution.
·
Suspended:
Thread responds to a Suspend method call.
·
Stopped:
The Thread is Stopped, either normally or Aborted.
Pictorial
Representation Thread states in c# .Net
For Example:
using System;
using System.Collections.Generic;
using
System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
// using this name space for
Threading
using System.Threading;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace ThreadConcept
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Thread th;
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls
= false;
th = new Thread(fun1);
}
// Thread function
public void fun1()
{
for (int i = 0; i <
30000; i++)
{
try
{
txtno.Text = i.ToString();
}
catch (ThreadAbortException ex)
{
if (MessageBox.Show("Do you want
to abort the thread",
"Thread Abort Request", MessageBoxButtons.YesNo) == DialogResult.No)
{
Thread.ResetAbort();
}
}
}
}
// Thread Start
private void btnStart_Click(object sender, EventArgs e)
{
if(th.ThreadState.ToString()
!= "Aborted")
th.Start();
}
// code for find current
state of thread
private void
btnthreadstate_Click(object sender, EventArgs e)
{
MessageBox.Show("Thread State
is => "+th.ThreadState);
}
// code for how to abort thread
private void
btnThreadAbort_Click(object sender, EventArgs e)
{
th.Abort();
}
// code for suspend thread
private void btnSuspend_Click(object sender, EventArgs e)
{
if
(th.ThreadState.ToString() == "Aborted")
{
MessageBox.Show("You can not
Suspend this Thread because Thread state
is Aborted");
}
if
(th.ThreadState.ToString() == "Running")
{
th.Suspend();
MessageBox.Show(th.ThreadState.ToString());
}
}
// code for Resume thread
private void btnResume_Click(object sender, EventArgs e)
{
if
(th.ThreadState.ToString() == "Aborted")
{
MessageBox.Show("You can not
Resume this Thread because Thread state
is Aborted");
}
if
(th.ThreadState.ToString() == "Suspended")
{
th.Resume();
MessageBox.Show(th.ThreadState.ToString());
}
}
// code for check thread is
live or dead state
private void btnIsAlive_Click(object sender, EventArgs e)
{
if (th.IsAlive == true)
{
MessageBox.Show("Thread is
live");
}
else
{
MessageBox.Show("Thread
dead");
}
}
}
}
Result