PDA

View Full Version : سوال: مشکل با مدیریت رویدادها آرایه ای از BackgroundWorker



mohammadhusseinashoori
یک شنبه 17 مرداد 1395, 13:21 عصر
با سلام
من یک برنامه با ساختار بسیار محاسباتی نوشتم که برای افزایش سرعت اون اومدم و از backgroundworker استفاده کردم این برنامه مربوط به محاسبه اعداد اول هست که بسیار سنگین هست.
و برای افزایش سرعت اون لازمه که حجم بیشتری از منابع رو درگیر کنه و سریع تر محاسبه کنه


من تونستم با ساخت 20 تا backgroundWorker سرعت برنامه را خیلی خیلی بالا ببرم (محاسبه 30 دقیقه رو در 70 ثانیه انجام میده)
به هرحال سوالم اینه:
من میخوام به جای ساخت تعداد ثابتی backgroundworker بیام از ارایه استفاده کنم

مثلا :

141900


ارور رویداد رو چطور برطرف کنم؟
اینم بگم که هر bakground worker بر اساس شماره که داره (مثل 5 امین) دستور خاصی رو اجرا می کنه که وابسته به شماره اون هست.


خیلی ممنونم.

ژیار رحیمی
یک شنبه 17 مرداد 1395, 17:34 عصر
Workers = new BackgroundWorker[n];
for (int i = 0; i < n; i++)
{
Workers[i] = new BackgroundWorker();
Workers[i].DoWork += new DoWorkEventHandler(bw_DoWork);
}


private void bw_DoWork(object sender, DoWorkEventArgs e)
{
//Code
}

mohammadhusseinashoori
پنج شنبه 21 مرداد 1395, 17:57 عصر
سلام خیلی خیلی ممنونم فقط وقتی برنامه رو اجرا می کنم ارور میده ارور index out of Range Exception was unhandled این ارور رو چطور باید درست کرد؟

mrprestige
پنج شنبه 21 مرداد 1395, 18:20 عصر
سلام دوست من ، با اجازه از استاد محترم جناب ژیار رحیمی (http://barnamenevis.org/member.php?48557-%DA%98%DB%8C%D8%A7%D8%B1-%D8%B1%D8%AD%DB%8C%D9%85%DB%8C) ، دوست من استاد یادشون رفت که این رو داخل حلقه For بنویسند به این صورت بنویسید

for (int i = 0; i < n-1; i++)


پیروز و موفق باشید

mohammadhusseinashoori
جمعه 22 مرداد 1395, 13:01 عصر
با سلام
بله ممنونم ولی وقتی کد را اجرا می کنم با ارور روبرو میشم این ارور برطرف شه اماده میشه.

بابت پاسخ گویی سریع شما بسیار ممنونم

mrprestige
جمعه 22 مرداد 1395, 14:00 عصر
سلام دوست من ، متوجه شدم این خطای شما به این معنی که ایندکسی که انتخاب کردید خارج از محدوده است .به این خاطر هم عرض کردم حلقه رو به این شکل تغییر بدید یا i <= n و یا i < n-1 . بعد هم در نظر داشته باشید ایندکس ها از صفر شروع میشن.

mohammadhusseinashoori
شنبه 23 مرداد 1395, 19:20 عصر
سلام
شما درست می فرمایید و باید ابتدای حلقه را به آن صورت نوشت.
ولی حتی اگر حلقه را بردارم و فقط برای یک BackgroundWorker بنویسم باز هم ارور میدهد.

حتی با foreach هم نشد.



به هر حال اگر راه حلی پیدا کردید مرا مطلع سازید
ممنونم