PDA

View Full Version : تغییر خاصیت های یک کنترل در فرم با استفاده از thread



alireza4474
یک شنبه 31 مرداد 1395, 01:37 صبح
سلام

راستش من تازه شروع کردم به کار کردن با ترد ها(thread)

نمی دونم چرا به محضی که کد داخل یک ترد که مربوط به تغییر خاصیت از یک کنترل هست ارور میده مثلا وقتی میخوام متن یه تکست باکس رو عوض کنم ارور مید میشه یکم با توضیحات و مثال جوابم رو بدین؟


با تشکر

rambod18
یک شنبه 31 مرداد 1395, 02:02 صبح
داخل thread یک تابع رو فراخوانی کنید تو اون تابع هرچیزی که خواستید رو عوض کنید

ژیار رحیمی
یک شنبه 31 مرداد 1395, 02:11 صبح
دوست گرامی دسترسی به کنترل های داخل thread اصلی بوسیله Thread دیگر مستلزم Invoke کردن هست یه نمونه کد

Thread thread = new Thread(new ThreadStart(WorkThreadFunction));
thread.Start();

تابع اصلی Thread

public void WorkThreadFunction()
{
//فراخوانی برای یک کنترل
textBox1.Invoke((MethodInvoker) delegate
{
textBox1.test="Some set text from thread";
});
//فراخوانی برای چند کنترل
//Invoke((MethodInvoker)delegate {textBox1.test="Some set text from thread";});
}

alireza4474
یک شنبه 31 مرداد 1395, 15:03 عصر
خیلی ممنونم بابت راهنمایی هاتون خیلی بدردم خوردن

میشه یکمی راجع به invoke توضیح بدین که اصلا چی هست؟ میخوام درست درکش کنم که چیه؟؟؟

پیشاپیش ممنونم بابت راهنمایی هاتون

ژیار رحیمی
یک شنبه 31 مرداد 1395, 20:56 عصر
کنترل ها در ویندوز فرم مقید به یک Thread خاص(Thread ی که کنترل ها در آن ایجاد شده است) هستند و Thread safe نیستند.بنابراین اگر شما متدی از کنترل ها رو از Thread ی متفاوت فراخوانی نمایید شما باید یکی از متدهای Invoke (فراخوانی) کنترل ها به منظور Thread safe کردن کنترل(ها) در Threadدیگر استفاده کنید.
Thread safe حالتی هست که یک کنترل به طور همزمان توسط چندین Thread قابل دسترس نباشد و در هر حالت فقط یکی از Thread ها که اولین درخواست را داده باشد قابل دسترس باشد و تا اتمام عملیات توسط Thread های دیگر قابل دسترس نباشد.
موفق باشید