ورود

نسخه کامل مشاهده نسخه کامل : کار با backgroundWorker



CHAPTER
05-09-2009, 14:45
سلام به همه دوستان
من یه لیست ویو دارم که محتویات یه فایل xml رو توش نمایش می دم
اما چون حجم اطلاعات زیاد هست اگر در فرم فریز می شه می خواستم از backgroundWorker استفاده کنم و متد اضافه کردن داده ها در لیست ویو رو در رویداد DoWork نوشتم ولی خطای cross-thread exception می ده علتش هم فکر کنم به خاطر اینکه لیست ویو توسط thread‌اصلی برنامه ایجاد شده
می تونید راهنمایی بکنید چه کدی بنویسم
ممنون از لطف دوستان

CHAPTER
05-09-2009, 23:25
منم اومدم به شکل زیر عمل کردم ولی بازم فرم با یک عکس العمل فریز می شه دیگه اون خطا رو نمی ده ولی ...



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
05-09-2009, 23:45
سلام
ذات استفاده شما از متد Invoke صحیح است و راه حل مشکلتان همین است ولی نه اینکه کل دستورات را در آن اجرا کنید.
اینطوری اصلاً فرقی نمیکند که از کامپونت استفاده کردید و همانطور که خودتان گفتید باز فرم فریز میشود.

شما باید متد Invoke را فقط در جایی در داخل DoWork فراخوانی کنید که قصد دارید چیزی را در کنترلر اصلی روی فرم و یا خود فرم تغییر دهید.
مثلاً فقط برای اضافه کردن آیتم به ListView باید از Invoke استفاده کنید.

(
البته راه حل غیر استانداری هم دارد که از طرف مایکروسافت سفارش نشده و بهتر است به همین Invoke استاندارد و سافارش شده عادت کنید!
)

CHAPTER
05-09-2009, 23:57
سلام
ذات استفاده شما از متد Invoke صحیح است و راه حل مشکلتان همین است ولی نه اینکه کل دستورات را در آن اجرا کنید.
اینطوری اصلاً فرقی نمیکند که از کامپونت استفاده کردید و همانطور که خودتان گفتید باز فرم فریز میشود.

شما باید متد Invoke را فقط در جایی در داخل DoWork فراخوانی کنید که قصد دارید چیزی را در کنترلر اصلی روی فرم و یا خود فرم تغییر دهید.
مثلاً فقط برای اضافه کردن آیتم به ListView باید از Invoke استفاده کنید.

(
البته راه حل غیر استانداری هم دارد که از طرف مایکروسافت سفارش نشده و بهتر است به همین Invoke استاندارد و سافارش شده عادت کنید!
)

حق با شما ست
امتحان کردم دیدم درست شده
بازم متشکرم :11: