آموزش کار با Thread و کلاس Process در سی شارپ
- 1399/10/15
- 2587
- برنامه نویسی
ایجاد thread جهت انجام process های مختلف در محیط دات نت
هدف از ارائه این مقاله آموزش کار با threadها در زبان سی شارپ و استفاده از کلاس Process ها جهت انجام وظایف مختلف می باشد به طوری که هنگام اجرای سورس کد thread های مختلفی در یک برنامه شروع به کار کرده و Process های مختلف را شروع می کنند. حال این سوال پیش می آید که Thread یا نخ چیست؟ در حالت کلی هر زمان که قصد داریم یک برنامه تعداد درخواستهای زیادی را پاسخگو باشد و یا کاری را به موازات کار دیگر انجام دهد و برنامه هنگ نکند یا دچار توقف نشود به یک تکنولوژی نیاز داریم که به آن Thread می گویند. Multi-threading برای انجام چندین کار مورد استفاده قرار میگیرد . هر کار میتواند دارای چندین thread باشد . در یک نرم افزار multi-threaded ،کاربر توانایی بیشتری در خصوص استقاده از نرم افزار نسبت به یک نرم افزار single-threaded دارد . امروزه ، اکثر نرم افزار ها از multi-threading استفاده میکنند. ساختار سیستم عامل ویندوز به گونه ای می باشد که برای هر وظیفه یک Process خاصی ایجاد میکند و بحث Multi-Tasking را انجام میدهد این بحث نیز از قوانین Multi-Threading یا چند نخی تبعیت میکند در حالت کلی برای هر تسک یا task یک نخ تعریف میشود و رویه ها به طور موازی به انجام وظایف خود میپردازند.محیط برنامه نویسی دات نت و زبان سی شارپ نیز از این قاعده مستثنا نیست و Base برنامه نویسی و نحوه کامپایل نیز به صورت Threading صورت میگیرد و اگر بخواهیم یک برنامه به صورت Multi Threading بنویسیم کافی است کتابخانه Thread را به پروژه خود توسط دستور Using.system.Threading اضافه کنیم. در ادامه قصد داریم تا یک پروژه در محیط Console برای آشنایی بیشتر با کاربرد thread پیاده سازی کنیم. به این صورت که برنامه چندین نخ داشته و برای هر نخ یک Process جهت اجرای فایل های Exe در نظر میگیریم:
یک پروژه در Console App ایجاد میکنیم و در کلاس Program شروع به کدنویسی می کنیم :
1) در مرحله اول در متد Main چندین نخ با نام های thr,thr1,thr2 و با استفاده از روش New ایجاد میکنیم.
class Program
{
static void Main(string[] args)
{
Thread thr = new Thread(StartThread);
Thread thr1 = new Thread(StartThread1);
Thread thr2 = new Thread(StartThread2);
Console.WriteLine("Do you want to Start Thread??");
string Answer = Console.ReadLine();
if (Answer == "Yes")
{
thr.Start();
thr1.Start();
thr2.Start();
}
else
{
System.Environment.Exit(1);
}
}
2) سپس برای اختصاص Process به نخ های ایجاد شده نیاز هست تا چندین متد Static درون کلاس Program با نام های Start Thread و Start Thread1 و Start Thread2 تعریف کنیم.
از Process به دو صورت می توان استفاده کرد حالت اول که به صورت یک مولفه آماده که جزء کلاس های سیستمی می باشد و تنها با فراخوانی نام آن می توان استفاده نمود حالت دوم با Drag & Drop در محیط ویندوز فرم که جزء کنترل های پشت پرده می باشد و به راحتی در دسترس است
از کلاس Process برای Execute کردن یک برنامه ی خارجی استفاده میشود بطوریکه بعد از فراخوانی کلاس Process یا اضافه کردن کنترل آن به پروژه کافی است متد Start موجود در کلاس را Recall کنیم تا فایل Exe مورد نظر ما اجرا گردد.و برای پاس دادن آدرس باید فرمت خاصی که مورد قبول متد Start می باشد تعریف نمود که فرمت به صورت کامل در سورس کد توضیح داده شده است:
public static void StartThread()
{
System.Diagnostics.Process.Start(@"C:\Users\FarshadMarahem\Desktop\Slider.exe");
}
public static void StartThread1()
{
System.Diagnostics.Process.Start(@"C:\Users\FarshadMarahem\Desktop\Time_Recorder.exe");
}
public static void StartThread2()
{
System.Diagnostics.Process.Start(@"C:\Users\FarshadMarahem\Desktop\Calculating_suitable_Weight.exe");
}
3) درون هر متد با استفاده از ابزار System Diagnostics و کلاس Process یک فایل Exe اختصاص می دهیم و آدرس فایل را طبق سورس کد درون متد Start وارد می کنیم.
4) سپس از کاربر سوالی در خصوص اجرای نخ ها پرسیده میشود و کاربر با تایپ کردن Yes نخ ها شروع به اجرا کرده و فایل های Exe مورد نظر به ترتیب اجرا می شوند و وظایف process ها به صورت کامل انجام میگیرد.
5) فایل های Exe شامل پروژه اسلایدر، تایم ریکوردر و محاسبه BMI می باشد که در ویندوز فرم سی شارپ طراحی و پیاده سازی شده اند.
در پایان آموزش زبان برنامه نویسی سی شارپ از مقدماتی تا پیشرفته به شما پیشنهاد می شود.