رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش مقدماتی Thread برای مبتدیان - قسمت اول
#1
ا استفاده از کلاس Thread در فضای نامی System.Threading شما می توانید برنامه های چند نخی را به راحتی ایجاد کنید. وظیفه کلاس Thread این است که قطعه کدی که شما مشخص می کنید را در پس زمینه اجرا کند. به طور کلی یک پروسس ( که همان برنامه شما است ) می تواند یک یا چند Thread را برای اجرا ایجاد کند. در نتیجه برنامه شما می تواند چندین کار را که از همدیگر مستقل هستند را به صورت همزمان انجام دهد. مثلا در حالی که دارد یک فرمول پیچیده ریاضی را حل می کند می تواند در همان لحظه به عنوان مثال به دیتابیس وصل شود و یک query را روی این دیتابیس اجرا کند.

قطعه کدی که Thread باید ایجاد کند همان متدی است که همه شما با آن آشنا هستید. یعنی شما باید به Thread یک متد بدهید تا برای شما اجرا کند. اما هر متدی را نمی توانید بدهید! یعنی متد شما باید یک امضای مشخص داشته باشد. Thread می تواند تنها متدی را اجرا کند که پارامتر ندارد و هیچ مقداری را هم بر نگرداند یعنی مثلا به صورت زیر باشد :

کد پی‌اچ‌پی:
void DoSomthing(); 

خوب ، حالا .Net باید چه مکانیزمی داشته باشد تا اجازه ندهد که شما یک متد غیر مجاز را به Thread بدهید؟ برای گارانتی کردن این موضوع .Net از delegate استفاده میکند. delegate راهی است که می توان امضای متد را مشخص کرد. مثلا برای مشخص کردن متد هایی که نه پارامتر می گیرند نه مقداری را برمی گردانند باید از delegate به صورت زیر استفاده کرد :

کد پی‌اچ‌پی:
public delegate void YourDelegateName(); 

می بینید که راحت است و بسیار شبیه تعریف متد می باشد با این تفاوت که از کلمه کلیدی delegate استفاده می کند و بدنه هم ندارد. در تعریف بالا YourDelegateName نامی است اختیاری که شما به delegate خود میدهید و در برنامه از آن استفاده میکنید.

خوب به سراغ کلاس Thread خودمان برگردیم. قرار بود که یک متد بدهیم به کلاس Thread و آقای Thread برای ما اجرا کند.ما باید این متد را در سازنده کلاس Thread بدهیم به صورت زیر :

کد پی‌اچ‌پی:
کد:
Thread t =new Thread(MyMethod);

public 
void MyMethod()
{
// کد شما در این متد قرار می گیرد


بعد از این کار شما باید Thread خود را start کنید تا کد شما را اجرا کند به این صورت :

کد پی‌اچ‌پی:
t.Start(); 

و کار تمام است! تبریک می گویم شما اولین برنامه چند نخی خود را نوشتید!

نگاهی به جزئیات کار :
وقتی شما نام متد خود را در سازنده Thread دادید و برنامه شما بدرستی اجرا شد علت آن است که یکی از سازنده های Thread به صورت زیر است :

کد پی‌اچ‌پی:
public Thread(
    
ThreadStart start


یعنی سازنده انتظار دارد که شما شئی را به آن پاس کنید که از جنس ThreadStart باشد اما شما که تنها نام یک متد را به آن دادید علت چیست که برنامه شما درست اجرا می شود؟
علت این است که ThreadStart یک delegate است که اشاره به متدهای بدون پارامتر و بدون مقدار برگشتی میکند برای همین است که کامپایلر این روش را ایراد نمی گیرد یعنی ThreadStart به صورت زیر تعریف شده است :

کد پی‌اچ‌پی:
public delegate void ThreadStart(); 

روش دیگر برای پاس کردن یک متد به Thread این است که به صورت صریح از خود delegate
استفاده کنید یعنی به صورت زیر :
کد پی‌اچ‌پی:
ThreadStart threadDelegate = new ThreadStart(MyMethod);

Thread t = new Thread(threadDelegate); 

نتیجه گیری :

شما در اینجا با کلاس Thread آشنا شدید و نحوه پاس کردن یک متد بدون پارامتر را به Thread یاد گرفتید. سازنده Thread می تواند متد با پارامتر را هم بگیرد که برای فرستادن اطلاعات به Thread استفاده می شود.
[عکس: <a href=www.Mojsazan.com.gif]" class="mycode_img" />
پاسخ
سپاس شده توسط Beni_Vanda


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش کلمه کلیدی lock مهرداد عباسی 0 3,663 12-16-2009, 01:14 AM
آخرین ارسال: مهرداد عباسی
  استفاده از thread ها در C# مهرداد عباسی 0 3,837 12-16-2009, 01:01 AM
آخرین ارسال: مهرداد عباسی

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان