PDA

View Full Version : مبتدی: مشکل در اضافه کردن ایتم به لیست باکس توسط backgroundWorker



negar.rafie
پنج شنبه 12 بهمن 1391, 16:41 عصر
سلام بچه ها
من به یه مشکل فکر کنم خیلی ساده برخوردم که تا حالا سابقه نداشته
من وقتی میخوام به لیست باکس توسط backgroundWorker ایتم اضافه کنم نمیشه و ارور میده
لطفا راهنمایی کنید

اینم ارور
Cross-thread operation not valid: Control 'listBox1' accessed from a thread other than the thread it was created on.

plus
پنج شنبه 12 بهمن 1391, 16:44 عصر
این سوال بارها شده...کافیه متن خطا رو جستجو کنید.

negar.rafie
پنج شنبه 12 بهمن 1391, 17:04 عصر
در جستجویی که کردم در یکی از تاپیکها گفته شده بود که از کد زیر استفاده کنم :

ListBox.CheckForIllegalCrossThreadCalls = false;



حالا این کد چی هستش و چکار میکنه و ایا استفاده از اون مشکلی نداره واستاندارد هستش؟

plus
پنج شنبه 12 بهمن 1391, 17:13 عصر
ببینید شما باید به کنترل ها، در همون Threadی که ساخته شدن دسترسی پیدا کنید و نه در Thread دیگر.کنترلهای شما (در حالت عادی) در Thread اصلی برنامه ساخته میشن.وقتی شما در BackgroundWorker به اونا دسترسی پیدا میکنید، از Thread دیگری دارین این عمل رو انجام میدین.کد که گذاشتین، فقط باعث میشه که این بررسی رو انجام نده و یه جورایی پاک کردن صورت مساله هست و روش درستی نیست.
یکی از راههای صحیحی که میشه این کارو کرد، استفاده از متد Invoke کنترلی هست که میخوایین در یک Thread دیگه باهاش کار کنید.با استفاده از این متد، کد شما در Thread اون کنترل اجرا میشه:

listBox1.Invoke(new Action( () =>
{
listBox1.Items.Add(myItem);
}));

negar.rafie
پنج شنبه 12 بهمن 1391, 17:17 عصر
ممنون دوست خوبم