PDA

View Full Version : حرفه ای: روش کار با BackgoundWorker



Hossis
دوشنبه 21 دی 1388, 11:03 صبح
من با استفاده از یک حلقه که شاید هزاران بار شمارش شود، فایلهای متنی را باز و پردازش می کنم
پردازش این گونه باعث کندی و دست و پاگیری برنامه می شود و ممکن است برنامه هنگ شود
چطور می توان با استفاده از Backgroundworker این حلقه را در پس زمینه برنامه انجام داد به طوری که برنامه به روال عادی کار کند؟

bashiry
دوشنبه 21 دی 1388, 19:02 عصر
اين مبحث قبلا به طور كامل بحث شده

براي پيدا كردن تاپيك هاي مرتبط در قسمت جستجو Backgroundworker بنويس

Mani_rf
دوشنبه 21 دی 1388, 19:18 عصر
نگاهی به این تاپیک بی انداز :

http://barnamenevis.org/forum/showthread.php?t=191909

Hossis
سه شنبه 22 دی 1388, 09:14 صبح
نگاهی به این تاپیک بی انداز :


http://barnamenevis.org/forum/showthread.php?t=191909

از Multi-Threading هم استفاده کردم ولی وقتی می خواهم درون حلقه متنی را پردازش کنم که در تکست باکس فرم یک هست، اشکال میگیرد و نمی گذارد به فرم دسترسی پیدا کرد
متن پیام به این شرح است:


An error occurred creating the form. See Exception.InnerException for details.
The error is: ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot
be instantiated because the current thread is not in a single-threaded apartment.

bashiry
سه شنبه 22 دی 1388, 12:05 عصر
توابعت رو داخل روتين ReportProgress بنويس

Hossis
سه شنبه 22 دی 1388, 18:18 عصر
توابعت رو داخل روتین ReportProgress بنویس
میشه در چند خط توضیح بدید؟

mehdi.mousavi
سه شنبه 22 دی 1388, 18:22 عصر
میشه در چند خط توضیح بدید؟

سلام.
من قبلا نحوه استفاده از BackgroundWorker رو در این تاپیک (http://barnamenevis.org/forum/showthread.php?p=880050) توضیح دادم. (البته کد من C# هستش، اما خوب، قاعدتا تبدلیش به VB.NET کار دشواری نیست).

موفق باشید.

Hossis
سه شنبه 22 دی 1388, 18:47 عصر
سلام.
من قبلا نحوه استفاده از BackgroundWorker رو در این تاپیک (http://barnamenevis.org/forum/showthread.php?p=880050) توضیح دادم. (البته کد من C#‎ هستش، اما خوب، قاعدتا تبدلیش به VB.NET کار دشواری نیست).

موفق باشید.
سطح بیان مطلب در اون تاپیک خیلی پیچیده و مشکل هست و من چیزی متوجه نشدم:افسرده:
البته مشکل را به طریقی دیگر حل کردم:تشویق:
به این صورت که حلقه تکرار شونده را درون فرمی دیگر اجرا کردم تا فرم اصلی هنگ نکند و در داخل حلقه هم از کلمه جادوئی (doevents) استفاده کردم تا برنامه فرصت اجرا به توابع دیگر هم بدهد:قهقهه::گیج:

mehdi.mousavi
سه شنبه 22 دی 1388, 18:53 عصر
و در داخل حلقه هم از کلمه جادوئی (doevents) استفاده کردم تا برنامه فرصت اجرا به توابع دیگر هم بدهد

سلام.
برای اطلاع از خطرات جادویی دستور DoEvents نیز، به این پست مراجعه کنید! (http://barnamenevis.org/forum/showpost.php?p=865882&postcount=2)

موفق باشید.

پاورقی: میبینید؟ هرکاری میخواهید انجام بدید قبلش یکی در موردش حرف زده! پس بهتر نیست قبل از اینکه سوالی رو مطرح کنید، اندکی جستجو کنید؟

Hossis
چهارشنبه 23 دی 1388, 02:09 صبح
سلام.
پاورقی: میبینید؟ هرکاری میخواهید انجام بدید قبلش یکی در موردش حرف زده! پس بهتر نیست قبل از اینکه سوالی رو مطرح کنید، اندکی جستجو کنید؟
دوست عزیز، من جستجو کردم ولی اکثر نتایج به زبان سی شارپ بود که من متوجه نشدم اونهائی هم که به زبان وی بی بود، به نتیجه دلخواه نرسیده بود
وانگهی این مشکل از انجمن است که موضوعات تالارها را ریز و جزئی نمی کند چرا که اگر "کنترل ها و ابزارها" یک زیرتالار داشت، به راحتی این بحث پیدا می شد و هیچ کس بحث تکراری مطرح نمی کرد.

mehdi.mousavi
چهارشنبه 23 دی 1388, 11:29 صبح
دوست عزیز، من جستجو کردم ولی اکثر نتایج به زبان سی شارپ بود که من متوجه نشدم اونهائی هم که به زبان وی بی بود، به نتیجه دلخواه نرسیده بود. وانگهی این مشکل از انجمن است که موضوعات تالارها را ریز و جزئی نمی کند چرا که اگر "کنترل ها و ابزارها" یک زیرتالار داشت، به راحتی این بحث پیدا می شد و هیچ کس بحث تکراری مطرح نمی کرد.

سلام.
تبدیل کردن کدهای C# به .NET (حداقل تا حدی که قابل فهم بشه)، با چنین ابزارهای Online (http://converter.telerik.com/) ای کار آسونی هستش. از طرف دیگه، قاعدتا شما نباید انتظار داشته باشید که برای هر کلاس یا حتی Namespace، تالار جداگانه ای اختصاص داده بشه! اونم تو دو زبون یکسان (با Syntax متفاوت) از یک Framework! امروز شما با این ایراد مواجه شدید تالار "کنترل و ابزارها" رو پیشنهاد دادید، فردا من با OLEDB به مشکل میخورم، تالار مربوطه رو پیشنهاد میدم و پس فردا یه نفر دیگه...

موفق باشید.