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

نام تاپیک: تابع های تو در تو در background worker

  1. #1
    کاربر دائمی آواتار sajadsobh
    تاریخ عضویت
    تیر 1390
    محل زندگی
    رشت
    سن
    37
    پست
    420

    Question تابع های تو در تو در background worker

    سلام دوستان و اساتید محترم. خسته نباشید.
    من یه برنامه تحت ویندوز نوشتم که باید یه سری اطلاعات رو از لوکال به سمت هاست بفرستم که این ارسال اطلاعات رو توی تابع Send نوشتم حالا توی همین ثبت دیتا نیاز دارم که یه عکس هم آپلود کنم و آدرسش رو برگردونم و این کار رو توی تابع UploadImage انجام دادم که این تابع توی تابع Send فراخونی میشه. حالا واسه اینکه کاربر فکر نکنه برنامه هنگ کرده اومدم یه عکس Gif و یه متن با تکست "در حال ارسال اطلاعات" قرار دادم که وقتی شروع به ارسال و آپلود شد اون Gif نمایش داده بشه.و اینکار رو هم با یه backgroundworker انجام دادم به این شکل:

    private void btn_save_Click(object sender, EventArgs e)

    {
    lbl_waiting.Visible = true;
    pic_waiting.Visible = true;
    foreach (Control x in this.Controls)
    {
    if (!(x is PictureBox))
    x.Enabled = false;
    }
    if (!backgroundWorker1.IsBusy)
    backgroundWorker1.RunWorkerAsync();
    }


    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
    Send();
    }



    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    if (e.Error == null)
    {
    if (flag)
    {
    lbl_waiting.Visible = false;
    pic_waiting.Visible = false;
    MessageBox.Show(this, "عملیات ثبت با موفقیت انجام شد.", "تکمیل عملیات!", MessageBoxButtons.OK,
    MessageBoxIcon.None, MessageBoxDefaultButton.Button1,
    MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);
    frm_addedit_Load(null, null);
    }
    }
    }

    public void Send()
    {
    UploadImage();
    //Do Somthing for Save Data
    }

    حالا مشکل اینجاست وقتی که برنامه میره توی تابع UploadImage و داره عکس ارسال میکنه مثه اینکه هنگ میکنه و عکس Gif من ثابت می مونه. ولی بعد از انجام آپلود دوباره برمیگرده به حالت عادی. فکر میکنم مشکل از اینه که تابع تو در تو استفاده کردم باشه. چون اومدم به جای دستورات توی Send و همچنین UploadImage از Sleep استفاده کردم. بازم ایست میکنه. یعنی ربطی به دستوراتی که توی Send و Upload نوشتم نیست. چه راه حلی واسش هست؟!
    آخرین ویرایش به وسیله Mahmoud.Afrad : پنج شنبه 22 بهمن 1394 در 20:36 عصر

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

    نقل قول: تابع های تو در تو در background worker

    سلام
    قبل از هر چیزی شما لازم نیست با یه حلقه for تمام کنترل های روی فرم رو به حالت غیر فعال دراری.به جای آن دکمه ثبت رو به حالت غیر فعال در بیار بعد از ارسال مجدد دکمه ارسال رو فعال کن.
    با فرض اینکه کدهای ارسال تصویر مشکلی نداره.کدهای شما مشکلی در ظاهر نداره انچه به نظر من چنین مشکلی رو بوجود میارد احتمالا backgroundWorker هست.شما بهتره به جای متد RunWorkerAsync() از RunWorker() استفاده کن ببین مشکلت حل میشه.شما همچنین میتونی lbl_waiting و pic_waiting رو در یک Thread دیگر run کنی
    First,solve the problem then write the code

  3. #3

    نقل قول: تابع های تو در تو در background worker

    سلام
    توی دات نت جدید این مشکل حل شده و شما میتونید از async , await استفاده کنید.

  4. #4
    کاربر دائمی آواتار sajadsobh
    تاریخ عضویت
    تیر 1390
    محل زندگی
    رشت
    سن
    37
    پست
    420

    نقل قول: تابع های تو در تو در background worker

    نقل قول نوشته شده توسط ژیار رحیمی مشاهده تاپیک
    سلام
    قبل از هر چیزی شما لازم نیست با یه حلقه for تمام کنترل های روی فرم رو به حالت غیر فعال دراری.به جای آن دکمه ثبت رو به حالت غیر فعال در بیار بعد از ارسال مجدد دکمه ارسال رو فعال کن.
    با فرض اینکه کدهای ارسال تصویر مشکلی نداره.کدهای شما مشکلی در ظاهر نداره انچه به نظر من چنین مشکلی رو بوجود میارد احتمالا backgroundWorker هست.شما بهتره به جای متد RunWorkerAsync() از RunWorker() استفاده کن ببین مشکلت حل میشه.شما همچنین میتونی lbl_waiting و pic_waiting رو در یک Thread دیگر run کنی
    RunWorker() همچین متدی نداره که!

  5. #5
    کاربر دائمی آواتار sajadsobh
    تاریخ عضویت
    تیر 1390
    محل زندگی
    رشت
    سن
    37
    پست
    420

    نقل قول: تابع های تو در تو در background worker

    نقل قول نوشته شده توسط peikesms123 مشاهده تاپیک
    سلام
    توی دات نت جدید این مشکل حل شده و شما میتونید از async , await استفاده کنید.
    میشه بیشتر توضیح بدین؟!

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

    نقل قول: تابع های تو در تو در background worker

    سلام عذر خواهی میکنم با یه چیز دیگه اشتباهی گرفته شد.درسته Backgroundworker متدی با این نام نداره.اگر ورژن Net. شما 4.5 به بالا باشه میتونی از await و async استفاده کرد.شما بهتره کار نمایش lbl_waiting و pic_waiting از Thread استفاده کرد.یا از Progressbar استفاده کنی که نمونه مثال در لینک زیر مطالعه نمایید
    https://msdn.microsoft.com/en-us/lib...(v=vs.95).aspx
    https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx

    جهت آشنایی بیشتر با await و async
    https://msdn.microsoft.com/en-us/library/hh191443.aspx

    و اما مشکل برمیگرده به دستکاری عناصر UI در Thread غیر از Thread جاری ،Backgroundworker یک Thread هست که در پس زمینه در حال اجرا میباشد.در Backgroundworker شما lbl_waiting و pic_waiting که در Thread اصلی هست رو دستکاری میکنی بهتر کد تابع backgroundWorker1_RunWorkerCompleted به صورت زیر اصلاح کنی

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    if (e.Error == null)
    {
    if (flag)
    {
    Invoke((MethodInvoker)delegate
    {
    lbl_waiting.Visible = false;
    pic_waiting.Visible = false;
    MessageBox.Show(this, "عملیات ثبت با موفقیت انجام شد.", "تکمیل عملیات!", MessageBoxButtons.OK,
    MessageBoxIcon.None, MessageBoxDefaultButton.Button1,
    MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);
    frm_addedit_Load(null, null);
    });
    }
    }
    }
    First,solve the problem then write the code

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

  1. سوال: جلوگیری از چندین بار اجرا شدن یک تابع در background worker
    نوشته شده توسط dharmaa در بخش C#‎‎
    پاسخ: 5
    آخرین پست: سه شنبه 20 مرداد 1394, 13:53 عصر
  2. صدا زدن Event در Background Worker
    نوشته شده توسط sirvan-me در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 24 آبان 1391, 10:24 صبح
  3. سوال: گذاشتن شئ های بانک در Background Worker
    نوشته شده توسط Unknownlive در بخش C#‎‎
    پاسخ: 3
    آخرین پست: دوشنبه 25 بهمن 1389, 21:31 عصر
  4. subreport های تو در تو
    نوشته شده توسط aliasghar در بخش گزارش سازی با Crystal Report
    پاسخ: 0
    آخرین پست: یک شنبه 09 بهمن 1384, 20:25 عصر
  5. مشکل در گروهبندی های تو در تو
    نوشته شده توسط amirhosein در بخش گزارش سازی با Crystal Report
    پاسخ: 8
    آخرین پست: دوشنبه 09 آبان 1384, 15:14 عصر

برچسب های این تاپیک

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

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