سلام
چطوری میشه یه تابع رو که دارای پارامتر ورودی هست رو به صورت یک Thread اجرا کرد ؟؟ راه دیگه ای هم اگه به ذهن دوستان میرسه لطفا بگین،مرسی
سلام
چطوری میشه یه تابع رو که دارای پارامتر ورودی هست رو به صورت یک Thread اجرا کرد ؟؟ راه دیگه ای هم اگه به ذهن دوستان میرسه لطفا بگین،مرسی
دوست عزیز تا انجا که می دانم در theard ها تابع می تواند یک پارامتر ان هم از نوع object داشته باشد مانند کد زیر
private void Form1_Load(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(theard);
}
void theard(object a) { }
اگر شما بیش از یک پارمتر می خواهید من از این روش استفاده می کنم یک arraylist را به ان تابع پاس می کنم
خب الان شما توی کدی که نوشتی چطور ابجکت a رو به تابعت پاس میکنی ؟
مثل بقیه پارامترها !
قفل مخفی تلگرام، واتس اپ و همه برنامه ها - قفل حرفه ای برای دستگاه اندرویدی شما - با امکان مخفی شدن و جلوگیری از Unisntall شدن
--آموزش ایجاد برنامه های چند زبانه در WPF
-BeRMOoDA File Encrypter-open source-using WPF, C# and MVVM Pattern
-نمونه برنامه ساده و کامل با الگوی MVVM برای کار با دیتابیس با استفاده از Entity Framework در WPF
-WPFMessageBox فارسی/انگلیسی - با قابلیت تغییر Skin
سعی کن از کنترل BackGroundWorker استفاده کنی . یه کنترله آماده برای کار با رشته ها .
بابا نمیشه ... شما یه متد تعریف کنید که یه پارامتر بگیره، بعد توی شی ThreadStart ای که ساختید این تابع رو بهش پاس کنید(البته با پارامترش)، ببینید Error میگیره .. اگه تونستید این کار رو انجام بدید، کدشو اینجا بذارید،با Backgroundworker هم کار کردم ولی اون چیزی که میخوام نیست، ببینید من با یه Thread میخوام یه فرم Loading با ارسال پارامتری از نوع String رو به کاربر نشون بدم(ShowDialog()) بعد یه سری عملیات انجام بشه، بعد Thread مورد نظر Abort بشه، این کار با Thread فقط با متدهایی میشه که از نوع Void باشه و پارامتر هم نداشته باشه، متد من Void هست ولی یه پارامتر میگیره، مشکلم اینه. مرسی
اگه وقت کردم حتما میذارم کد
در ضمن به هر تعداد که بخوای میشه پارامتر پاس داد ( بصورت آرایه ای از object ها )
فردا امتحان دارم بعدا کد میذارم
قفل مخفی تلگرام، واتس اپ و همه برنامه ها - قفل حرفه ای برای دستگاه اندرویدی شما - با امکان مخفی شدن و جلوگیری از Unisntall شدن
--آموزش ایجاد برنامه های چند زبانه در WPF
-BeRMOoDA File Encrypter-open source-using WPF, C# and MVVM Pattern
-نمونه برنامه ساده و کامل با الگوی MVVM برای کار با دیتابیس با استفاده از Entity Framework در WPF
-WPFMessageBox فارسی/انگلیسی - با قابلیت تغییر Skin
من این کد را بکار بردم درست کار می کند
private void Form1_Load(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(theard);
t.Start(10);
}
int a;
void theard(object a) {
a = Convert.ToInt32(a);
MessageBox.Show(a.ToString());
}
ایول ... درست همونی بود که میخواستم ... مشکل همین تابع Start بود که نمیدونستم پارامترهای تابع رو اینجا باید بهش پاس کنم، بهر حال دستت درد نکنه، دست همه درد نکنه
بابا یه مشکل دیگه :
من کد زیر رو به کار بردم، برنامه درست کامپایل و اجرا شد :
System.Threading.Thread th = new System.Threading.Thread(this.ShowWaitForm);
th.Start("در حال اضافه کردن آیتم ...");
this.AddData();
this.LoadData();
th.Abort();
ول نمیدونم الان که میخوام کامپایل کنم از تابعی که به Thread پاس کردم Error میگیره :
Error 2 Argument '1': cannot convert from 'method group' to 'System.Threading.ThreadStart'
البته یه Error دیگه هم میده :
Error 3 The best overloaded method match for 'System.Threading.Thread.Thread(System.Threading.T hreadStart)' has some invalid arguments
بچه ها مشکلم حل شد.
در آرگومانی که به تابع ارسال میکردم، به جای String نوع Object رو جایگزین کردم مشکل حل شد ولی آخه چرا الان Error میگیرفت ؟؟ نکنه یادش رفته بوده ؟؟
msdn این یک راه دیگه است
Thread newThread = new Thread( new ParameterizedThreadStart(DoWork));
newThread.Start(42);
راه دیگه هم داره که استفاده از کلاس بندی و هر ترد یک شی از یک کلاس ترد که تمام متغیر هاش مختص خودش هست خواستی بیشتر کمکت کنم بگو
private void Form1_Load(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(theard);
object o=new object();
t.Start(o);
}
void theard(object a) { }
کلا با نوع آبجکت کار میکنن اینا با نوع های دیگه سازگار نیستن.باید یه ذره تبدیل توی کد به کار ببرید!
با این روش می توانید هر تعداد پارامتر که خواستید به تابع بفرستید:
private void Form1_Load(object sender, EventArgs e) {
string strFirstName = "Mohammad";
string strLastName = "Ahmadi";
System.Threading.Thread td = new System.Threading.Thread
(delegate() { Function(firstName: strFirstName, lastName: strLastName); });
td.Start();
}
public void Function(string firstName, string lastName)
{
//Do Something ...
}
آخرین ویرایش به وسیله mohammad3062 : یک شنبه 17 خرداد 1394 در 00:21 صبح