PDA

View Full Version : سوال: مشکل در استفاده از Threading



mehrdad1991h
دوشنبه 11 دی 1391, 16:26 عصر
سلام
به این قسمت توجه کنید لطفا


class1 st = new class1();
string a = addresse.Text;
System.Threading.Thread th1 = new System.Threading.Thread(new System.Threading.ThreadStart(st.start(a)));
th1.Start();


و این هم کلاسی هست که داریم

class class1
{
public void start(string m)
{
System.Diagnostics.Process.Start(m);

}
}



توضیح :
کاربر ادرس فایل اجرایی را در تکست باکس ادرس وارد میکند
به وسیله ی Thread میخواهیم فایل اجرایی را اجرا کنیم
یک کلاس قرار دادیم و در کلاس گفته شده که ادرس را از تکست باکس بگیره و فایل را اجرا کنه

خوب الان مشکل اینجاست که ادرس را از تکست باکس (کاربر) باید بگیریم و برای کلاس بفرستیم که در این حالت Thread قبول نمیکنه !
الان من چه خاکی بر سر کنم ؟
سپاس

tooraj_azizi_1035
دوشنبه 11 دی 1391, 16:32 عصر
باید از ParameterizedThreadStart استفاده کنی :

class1 st = new class1();
string a = addresse.Text;
System.Threading.Thread th1 = new System.Threading.Thread(new System.Threading.ThreadStart(st.start));
th1.Start(a);

mehrdad1991h
دوشنبه 11 دی 1391, 16:50 عصر
باید از ParameterizedThreadStart استفاده کنی :

class1 st = new class1();
string a = addresse.Text;
System.Threading.Thread th1 = new System.Threading.Thread(new System.Threading.ThreadStart(st.start));
th1.Start(a);



در کمال تعجب کار نداد !
به این قسمت ایراد میگیره
new System.Threading.ThreadStart(st.start)
اینم متن ارور هاش


Error 1 No overload for method 'start' takes 0 arguments
Error 2 No overload for 'start' matches delegate 'System.Threading.ThreadStart

mehdi.mousavi
دوشنبه 11 دی 1391, 17:04 عصر
سلام.
ایراد مورد نظر به این دلیل رخ میده که Signature تابع Start با Signature تابع ParameterizedThreadStart نمیخونه...
برای رفع مشکل، باید Start رو بدین شکل تعریف کنید:

public void start(object o)
{
}


البته دقت کنید که آقای عزیزی به اشتباه از ThreadStart استفاده کرده اند، که شما باید اونو به ParameterizedThreadStart تغییر بدید.

موفق باشید.

mehrdad1991h
دوشنبه 11 دی 1391, 17:25 عصر
الان من یکم نفهمیدم الان دیگه نباید از System.Diagnostics.Process.Start استفاده بشه ؟
اگه باید استفاده بشه که اینجوری ابجکت با اینا جور در نمیاد که
ببخشید فک کنم نفهمیدم !

mehdi.mousavi
دوشنبه 11 دی 1391, 17:37 عصر
الان من یکم نفهمیدم الان دیگه نباید از System.Diagnostics.Process.Start استفاده بشه ؟
اگه باید استفاده بشه که اینجوری ابجکت با اینا جور در نمیاد که
ببخشید فک کنم نفهمیدم !

سلام.
لطفا مثال موجود در این آدرس (http://msdn.microsoft.com/en-us/library/system.threading.parameterizedthreadstart.aspx) رو بدقت مطالعه کنید تا با روش کار ParameterziedThreadStart آشنا بشید.
اما من الان سوال اصلی رو خوندم (پست اول). شما برای چی می خواهید اجرای فایل رو به یک Thread بسپرید؟
بنظرم دارید مسیر رو اشتباه میرید... اگر در مورد سوال اصلی این پست قدری توضیح بدید و بفرمایید دقیقا مشکلتون چیه،
احتمالا راه بهتری میشه ارائه داد.

موفق باشید.

mehrdad1991h
دوشنبه 11 دی 1391, 17:52 عصر
سلام.
لطفا مثال موجود در این آدرس (http://msdn.microsoft.com/en-us/library/system.threading.parameterizedthreadstart.aspx) رو بدقت مطالعه کنید تا با روش کار ParameterziedThreadStart آشنا بشید.
اما من الان سوال اصلی رو خوندم (پست اول). شما برای چی می خواهید اجرای فایل رو به یک Thread بسپرید؟
بنظرم دارید مسیر رو اشتباه میرید... اگر در مورد سوال اصلی این پست قدری توضیح بدید و بفرمایید دقیقا مشکلتون چیه،
احتمالا راه بهتری میشه ارائه داد.

موفق باشید.

یه برنامه نوشتم دانلود منیجر را باید هر چند ثانیه چک کنه و نگزاره که متوقف بشه
حالا به صورت عادی که این کار را بکنم نمیشه برنامه خودم هنگ میکنه با این Thread اجراش میکنم که برنامه خودم هنگ نکنه و کارش را ادامه بدهد
با داس و فایل bat هم میشه این کار را کرد ولی صفحه داس باز میشه یکم ناخوشاینده اعصاب خورد کن میشه همش هحی صفحه بیاد و بره

راه حل دیگه ای به ذهن شما میرسه؟

مهرداد صفا
دوشنبه 11 دی 1391, 18:51 عصر
سلام
از lambda هم میتوانید استفاده کنید:

Thread thread2 = new Thread(()=> Process.Start("notepad"));
thread2.Start();

mehrdad1991h
دوشنبه 11 دی 1391, 19:13 عصر
سلام
از lambda هم میتوانید استفاده کنید:

Thread thread2 = new Thread(()=> Process.Start("notepad"));
thread2.Start();

نمیشه
دستوری که باید اجرابشه اینجوریه

C:\.....\IDMan.exe /s

فعلا فقط همون راه استفاده از فایل bat جواب داده و دستورات داس که برنامه من هنگ میکند :(

plus
دوشنبه 11 دی 1391, 19:23 عصر
نمیشه
دستوری که باید اجرابشه اینجوریه

C:\.....\IDMan.exe /s

فعلا فقط همون راه استفاده از فایل bat جواب داده و دستورات داس که برنامه من هنگ میکند :(



Thread thread2 = new Thread(()=> Process.Start("C:\.....\IDMan.exe ", "/s"));
thread2.Start();

mehrdad1991h
دوشنبه 11 دی 1391, 20:16 عصر
Thread thread2 = new Thread(()=> Process.Start("C:\.....\IDMan.exe ", "/s"));
thread2.Start();


مرسی حل شد ! :)

r_s1389@yahoo.com
دوشنبه 11 دی 1391, 20:42 عصر
کد اولی رو که نوشته بودی رو دوباره اجرا کن ولی اینبار در فرم لود این کد رو بذار ببین اجرا میشه
Control.CheckForIllegalCrossThreadCalls = false;
اگه اجرا شد بگی ها
موفق باشی

mehrdad1991h
سه شنبه 12 دی 1391, 01:09 صبح
کد اولی رو که نوشته بودی رو دوباره اجرا کن ولی اینبار در فرم لود این کد رو بذار ببین اجرا میشه
Control.CheckForIllegalCrossThreadCalls = false;
اگه اجرا شد بگی ها
موفق باشی
مشکل من که حل شد ولی برا اینکه جواب شما را هم داده باشم باید بگم خیر نمیشه