مشاهده نسخه کامل
: کار با backgroundWorker
سلام به همه دوستان
من یه لیست ویو دارم که محتویات یه فایل xml رو توش نمایش می دم
اما چون حجم اطلاعات زیاد هست اگر در فرم فریز می شه می خواستم از backgroundWorker استفاده کنم و متد اضافه کردن داده ها در لیست ویو رو در رویداد DoWork نوشتم ولی خطای cross-thread exception می ده علتش هم فکر کنم به خاطر اینکه لیست ویو توسط threadاصلی برنامه ایجاد شده
می تونید راهنمایی بکنید چه کدی بنویسم
ممنون از لطف دوستان
منم اومدم به شکل زیر عمل کردم ولی بازم فرم با یک عکس العمل فریز می شه دیگه اون خطا رو نمی ده ولی ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
ذات استفاده شما از متد Invoke صحیح است و راه حل مشکلتان همین است ولی نه اینکه کل دستورات را در آن اجرا کنید.
اینطوری اصلاً فرقی نمیکند که از کامپونت استفاده کردید و همانطور که خودتان گفتید باز فرم فریز میشود.
شما باید متد Invoke را فقط در جایی در داخل DoWork فراخوانی کنید که قصد دارید چیزی را در کنترلر اصلی روی فرم و یا خود فرم تغییر دهید.
مثلاً فقط برای اضافه کردن آیتم به ListView باید از Invoke استفاده کنید.
(
البته راه حل غیر استانداری هم دارد که از طرف مایکروسافت سفارش نشده و بهتر است به همین Invoke استاندارد و سافارش شده عادت کنید!
)
سلام
ذات استفاده شما از متد Invoke صحیح است و راه حل مشکلتان همین است ولی نه اینکه کل دستورات را در آن اجرا کنید.
اینطوری اصلاً فرقی نمیکند که از کامپونت استفاده کردید و همانطور که خودتان گفتید باز فرم فریز میشود.
شما باید متد Invoke را فقط در جایی در داخل DoWork فراخوانی کنید که قصد دارید چیزی را در کنترلر اصلی روی فرم و یا خود فرم تغییر دهید.
مثلاً فقط برای اضافه کردن آیتم به ListView باید از Invoke استفاده کنید.
(
البته راه حل غیر استانداری هم دارد که از طرف مایکروسافت سفارش نشده و بهتر است به همین Invoke استاندارد و سافارش شده عادت کنید!
)
حق با شما ست
امتحان کردم دیدم درست شده
بازم متشکرم :11:
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.