PDA

View Full Version : یک مشکل مهم با thread ها



.مهدی فهمیده غلامی.
شنبه 26 شهریور 1384, 17:11 عصر
سلام چظوری میشه یه متد پارامتر دار رو بعنوان پارامتر متد threadstart معرفی کرد.
با توجه به اینکه ورودی این متد یک delegate آست من هم یه Delegate جهت اشاره
به متد پارامتر دار خودم معرفی کردم ولی خطای زمان کامپایل داده میشه:
کد:
<code>

public delegate void func(MyGeneticClass.CMyGeneticClass objGA,string strMessage

public void IsCompelete(MyGeneticClass.CMyGeneticClass objGA,string strMessage)
{
/*while (!boolDone)
{
int n=int.Parse(label2.Text)+1;
label2.Text= n.ToString();
richTextBox1.AppendText(objGA.ms);
}*/
}




.
...
<code/>
در متد Main:
کد:

MyGeneticClass.CMyGeneticClass GA =new MyGeneticClass.CMyGeneticClass(3,4);
func dt= new func(IsCompelete);

Thread Thread1 = new Thread(new ThreadStart(GA.Run));
Thread Thread2 = new Thread(new ThreadStart(dt));
Thread1.Start();
Thread2.Start();


البته خوندن این کد باید با حوصله باشه!!
در این کد من قصد دارم در زمان فراخونی متد GA.RUN که یک متد پر حجم می باشد
به کمک متدIsCompelete میزان پیشرفت اجرای متد GA.RUN رو نشون بدم. ولیکن خطای زمان کامپایل از خط
زیر گرفته میشه:
Thread Thread2 = new Thread(new ThreadStart(dt));
خطا:Method 'method' does not match delegate 'delegate

Babak-Aghili
شنبه 26 شهریور 1384, 17:26 عصر
البته خوندن این کد باید با حوصله باشه!

جالبه ! من قبل از ایشون ، تاپیکی ارسال کرده بودم که تعداد دفعات مشاهده اش 2 بار بود ... حالا که ایشون و چند نفر دیگه هم سوالاتی مطرح کرده اند ... باز هم تعداد دفعات مشاهده ی تاپیک من ، همان 2 بار است ...

معنی تلخ این موضوع اینه که متاسفانه برخی دوستان ، فقط میان سوال شخصی خودشون را میپرسند و کاری هم به مشکلات و پرسشهای بقیه ی کاربران ندارند و نهایتا هم انتظار دارند که با حوصله کدشون خونده بشه و بهشون جواب دااده بشه ... جالبه ...

امان از دست ما ایرانی ها .....

Reza_K
شنبه 26 شهریور 1384, 23:04 عصر
Delegate مربوط به نقطه شروع به کار thread بدون پارامتر میباشد. در کل شما نمیتوانید پارامتری را بطور مستقیم به Start point یک thread ارسال کنید(این کار در Win32 ممکن است).

روش کلی بدین صورت است که ابتدا کلاسی را که اعضای آن پارامترهای مورد نظر شما میباشند طراحی کرده و متدی بنام Start نیز بدان اضافه کنید. ابتدا در constructor این کلاس اعضا را با مقادیری که قصد ارسال به thread strat را دارید مقدار دهی کرده و سپس در متد start نخ(thread) خود را اجرا کنید.

در ضمن start point این thread باید یکی از اعضا همین کلاس باشد. چون این عضو به member variable ها دسترسی دارد.....

.مهدی فهمیده غلامی.
یک شنبه 27 شهریور 1384, 00:51 صبح
دوست عزیز Babak-Aghili باور کن من این روز ها درگیر پروژه خودم هستم وقت ندارم این ور اون ور رو سرک
بکشم.و الا حداقل من یکی اهل تنها خوری نیستم! روز هایی بوده که به نیت پاسخ به سوالات دوستان وارد سایت شدم از تذکر شما هم ممنون...
Reza_K با تشکر از توضیحتون اگه میشه یه مثال بزنید: پاس کردن یک متد پارمتر دار به startnewthread
چطوریه؟