نمایش نتایج 1 تا 3 از 3

نام تاپیک: اجرای همزمان چند متد و بروزرسانی رابط کاربری

  1. #1
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    ایران
    پست
    487

    اجرای همزمان چند متد و بروزرسانی رابط کاربری

    سلام
    یک برنامه کوچیک دارم که بایدبه صورت همزمان 11 متد رو اجرا کنه و به هنگام اتمام کار در هر یک از متد ها یک متن رو به متنهایی که در textbox وجود داره اضافه بکنه.
    در رویداد کلیک یک باتن این کد رو نوشتم

    Parallel.Invoke( () => GetCheapestFlightTehran(),
    () => GetCheapestFlightTabriz(),
    () => GetCheapestFlightMashhad(),
    () => GetCheapestFlightKish(),
    () => GetCheapestFlightAhvaz(),
    () => GetCheapestFlightIsfahan(),
    () => GetCheapestFlightShiraz(),
    () => GetCheapestFlightGeshm(),
    () => GetCheapestFlightAbadan(),
    () => GetCheapestFlightKermanshah(),
    () => GetCheapestFlightBandarAbbas()
    );

    و در هر یک از متدهای فراخوانی شده در بالا برای نشون دادن متن از این کد استفاده کردم


    txtResult.Invoke((Action)(() =>
    {
    txtResult.AppendText(DateTime.Now.ToString("HH:mm: ss") + @" Tehran Count = " + flightsTemp.Count + "\n");
    txtResult.AppendText(Environment.NewLine);
    }));

    حالا چند تا مشکل داریم : یکی اینکه به محظ شروع به کار برنامه کلا نمیشه پنجره برنامه رو تکون داد و مثل موقعی که یک برنامه هنگ میکنه میشه. و مشکل دیگه هم اینه که متن textbox رو به موقع و درست آپدیت نمیکنه یا چند دقیقه بعد آپدیت میکنه یا یک سری متن ها رو نشون نمیده و خلاصه درست نیست.
    فکر میکنم در استفاده از parallel یک موردی وجود داره که رعایت نشده . دوستانی که در این مورد تجربه دارن لطفا راهنمای کنن.
    با تشکر از همه دوستان

  2. #2

    نقل قول: اجرای همزمان چند متد و بروزرسانی رابط کاربری

    نقل قول نوشته شده توسط hmahdavi921 مشاهده تاپیک
    سلام
    یک برنامه کوچیک دارم که بایدبه صورت همزمان 11 متد رو اجرا کنه و به هنگام اتمام کار در هر یک از متد ها یک متن رو به متنهایی که در textbox وجود داره اضافه بکنه.
    در رویداد کلیک یک باتن این کد رو نوشتم

    Parallel.Invoke( () => GetCheapestFlightTehran(),
    () => GetCheapestFlightTabriz(),
    () => GetCheapestFlightMashhad(),
    () => GetCheapestFlightKish(),
    () => GetCheapestFlightAhvaz(),
    () => GetCheapestFlightIsfahan(),
    () => GetCheapestFlightShiraz(),
    () => GetCheapestFlightGeshm(),
    () => GetCheapestFlightAbadan(),
    () => GetCheapestFlightKermanshah(),
    () => GetCheapestFlightBandarAbbas()
    );

    و در هر یک از متدهای فراخوانی شده در بالا برای نشون دادن متن از این کد استفاده کردم


    txtResult.Invoke((Action)(() =>
    {
    txtResult.AppendText(DateTime.Now.ToString("HH:mm: ss") + @" Tehran Count = " + flightsTemp.Count + "\n");
    txtResult.AppendText(Environment.NewLine);
    }));

    حالا چند تا مشکل داریم : یکی اینکه به محظ شروع به کار برنامه کلا نمیشه پنجره برنامه رو تکون داد و مثل موقعی که یک برنامه هنگ میکنه میشه. و مشکل دیگه هم اینه که متن textbox رو به موقع و درست آپدیت نمیکنه یا چند دقیقه بعد آپدیت میکنه یا یک سری متن ها رو نشون نمیده و خلاصه درست نیست.
    فکر میکنم در استفاده از parallel یک موردی وجود داره که رعایت نشده . دوستانی که در این مورد تجربه دارن لطفا راهنمای کنن.
    با تشکر از همه دوستان
    سلام پارالل بیشتر برای حلقه for , foreach
    https://docs.microsoft.com/en-us/dot...allel-for-loop
    شما بهتره از Task ها استفاده کنید به نظرم خیلی بهتره و برنامه هنگ هم نمیکنه

  3. #3
    مدیر بخش آواتار ژیار رحیمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    1,095

    نقل قول: اجرای همزمان چند متد و بروزرسانی رابط کاربری

    مشکل اصلی در داخل بدنه توابعی که فراخوانی شده رخ میدهد بخصوص در مورد متغییر flightTemp به احتمال ریاد این متغییر ، یک متغییر عمومی در سطح کلاس هست.وقتی چندین Thread بصورت همزمان درخواست تغییر در یک متغییر اشتراکی را بدهند باعث (deadlock) یا همون هنگ کردن برنامه میشود .برای رفع آن باید روی متغییر flightTepmt یک lock قرار دهی(جهت Thread Safe کردن) تا در هر زمان فقط یک Thread امکان دسترسی به متغییر را داشته باشد .برای اطلاعات بیشتر در مورد Thread Safe کردن متدها و متغییرها جستجو کن.
    First,solve the problem then write the code

تاپیک های مشابه

  1. سوال: کار با کنترل ها در Visual Studio
    نوشته شده توسط darya-esf در بخش C#‎‎
    پاسخ: 2
    آخرین پست: یک شنبه 24 مرداد 1389, 12:24 عصر
  2. مشکل در کار با کنترل ها به صورت آرایه
    نوشته شده توسط bagher3466 در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: جمعه 11 آبان 1386, 21:03 عصر
  3. نحوه کار با class ها در ویژوال بیسیک 6
    نوشته شده توسط ppman2000 در بخش گزارش سازی با Crystal Report
    پاسخ: 1
    آخرین پست: چهارشنبه 30 خرداد 1386, 07:18 صبح
  4. کمک :: چگونگی کار با فایل ها در Turbo C :: فوری فوری(24 ساعته)
    نوشته شده توسط sajadsamet در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: دوشنبه 28 خرداد 1386, 13:38 عصر
  5. مشکل در کار با کنترل ها به صورت آرایه
    نوشته شده توسط Leon_pro در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: شنبه 04 شهریور 1385, 09:51 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •