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

نام تاپیک: مشکل کار با background worker

  1. #1

    مشکل کار با background worker

    سلام من برای نمایش میزان کپی فایلها از بگراند ورکر و پروگرس بار استفاده کردم ولی کار نمیکنه و موقع کپی اطلاعات فقط فرم هنگ میکنه و اطلاعات کپی میشه و درصد کپی شدن را توی پرگرس بار نمایش نمیده ...


    کدش را طوری نوشتم که در هر لحظه سایز فولدر مقصد که داره توش کپی میشه دریافت و برای تغییر مقدار پروگرس بار ارسال میشه .


    راهنمایی بفرمایید :


    private void backgroundWorker1_DoWork(DirectoryInfo source, DirectoryInfo destination)
    {
    if (!destination.Exists)
    {
    destination.Create();
    }

    // Copy all files.
    FileInfo[] files = source.GetFiles();
    foreach (FileInfo file in files)
    {
    file.CopyTo(Path.Combine(destination.FullName,
    file.Name));
    }

    // Process subdirectories.
    DirectoryInfo[] dirs = source.GetDirectories();
    foreach (DirectoryInfo dir in dirs)
    {
    // Get destination directory.
    string destinationDir = Path.Combine(destination.FullName, dir.Name);



    // --------------------------------Get and Send Destination Size-----------------------
    string[] dsize = System.IO.Directory.GetDirectories(@"d:\a", "*", (System.IO.SearchOption.AllDirectories));

    backgroundWorker1.ReportProgress(dsize.Length);

    // ------------------------------------------------------------------------------------


    // Call CopyDirectory() recursively.
    CopyDirectory(dir, new DirectoryInfo(destinationDir));



    }
    }



    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
    pb1.Value = e.ProgressPercentage ;
    }



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

     CopyDirectory(src, dest);
    backgroundWorker1.RunWorkerAsync();


    تشکر

  2. #2

    نقل قول: مشکل کار با background worker

    اشتباه پیش رفتی خوب
    ببین اینجا را

    CopyDirectory(src, dest);
    backgroundWorker1.RunWorkerAsync();


    شما اومدی اول عملیات کپی را در برنامه ات شروع کردی
    و بعد بکگراند ورکر را استارتش کردی
    این بک گراند ورکر اصلا چی کاره میشه اینجا ؟
    کپی را خود برنامه اصلیت مجبوره انجام بده دیگه
    بک گراند ورکر کاری نمیکنه الان که ؟؟؟؟ اصلا هیچ ارگومانی هم بهش ارسال نکردی که... پس چجوری کار میخواد بکنه ؟
    باید عملیات کپی را داخل بک گراند ورکر انجام بدی

    بعد یه سوال دیگه با این تغییری که دادید
    backgroundWorker1_DoWork(DirectoryInfo source, DirectoryInfo destination)

    اصلا بهتون هیچ ایرادی نگرفته ؟

    اخه اطلاعات را در بک گراند ورکر فقط به صورت ارگومان میشد ارسال کرد
    اصلا این بکگراند ورکر کار میده بهت ؟

  3. #3

    نقل قول: مشکل کار با background worker

    دستت درد نکنه درست شد فقط یک مشکل هست :

    وقتی برنامه داره کپی میکنه پرگرس بار روان نیست و برنامه کلا هنگه و هر چندین ثانیه یک تیکه بزرگ پرگرس بار پر میشه دوباره برنامه هنگ میکنه ...
    آخرین ویرایش به وسیله HOSSEINONLINE7 : پنج شنبه 31 مرداد 1392 در 22:45 عصر

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کنار یه ساحل خیلی زیبا
    پست
    922

    نقل قول: مشکل کار با background worker

    یه آموزش خوب جناب استادجمشیدی در ان مورد داره که اگه ببینیش مشکلاتت کامل حل میشه تو امضاءش هست
    موفق باشی

  5. #5

    نقل قول: مشکل کار با background worker

    نقل قول نوشته شده توسط esafb52 مشاهده تاپیک
    یه آموزش خوب جناب استادجمشیدی در ان مورد داره که اگه ببینیش مشکلاتت کامل حل میشه تو امضاءش هست
    موفق باشی
    دوست عزیز تشکر ولی من جناب استاد جمشیدی را نمیشناسم از کجا باید آموزششون را پیدا کنم ؟ سرچ کردم کسی به این نام پیدا نشد ...

    کد من یک مشکل کوچک داره که من نفهمیدم .

    کد کامل را میزارم شما یک بررسی کنید اگر مشکلی داره بگید :


     private void backgroundWorker1_DoWork(DirectoryInfo source, DirectoryInfo destination)
    {
    if (!destination.Exists)
    {
    destination.Create();
    }

    // Copy all files.
    FileInfo[] files = source.GetFiles();
    foreach (FileInfo file in files)
    {
    file.CopyTo(Path.Combine(destination.FullName,
    file.Name));
    }

    // Process subdirectories.
    DirectoryInfo[] dirs = source.GetDirectories();
    foreach (DirectoryInfo dir in dirs)
    {
    // Get destination directory.
    string destinationDir = Path.Combine(destination.FullName, dir.Name);



    // --------------------------------Get and Send Destination Size-----------------------

    DirectoryInfo di = new DirectoryInfo(@"d:\a");
    long dsize = di.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(fi => fi.Length);
    dsize = dsize / 1024 / 1024;
    backgroundWorker1.ReportProgress((int)dsize);

    // ------------------------------------------------------------------------------------


    // Call CopyDirectory() recursively.

    backgroundWorker1_DoWork(dir, new DirectoryInfo(destinationDir));



    }
    }



    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
    pb1.Value = e.ProgressPercentage ;
    }




    private void button3_Click(object sender, EventArgs e)
    {

    DirectoryInfo di = new DirectoryInfo(idmpath);
    long u = di.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(fi => fi.Length);
    u = u / 1024 / 1024;


    pb1.Maximum = (int)u;

    DirectoryInfo src = new DirectoryInfo(idmpath);
    DirectoryInfo dest = new DirectoryInfo(@"d:\a");

    backgroundWorker1_DoWork(src, dest);

    }


    }


    این کد درست کار میکنه و عملیات انجام میشه ولی از شروع تاپایان عملیات فرم هنگ میکنه و پروگرس بار تیکه تیکه و به کندی پر میشه

  6. #6
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کنار یه ساحل خیلی زیبا
    پست
    922

    نقل قول: مشکل کار با background worker


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

  1. کار با background Worker در سی شارپ
    نوشته شده توسط daneshjo90 در بخش C#‎‎
    پاسخ: 8
    آخرین پست: دوشنبه 13 مهر 1394, 21:05 عصر
  2. سوال: مشکل با background worker
    نوشته شده توسط SHD.NET در بخش C#‎‎
    پاسخ: 8
    آخرین پست: یک شنبه 10 دی 1391, 13:20 عصر
  3. مبتدی: مشکل در کار با BackGround Worker
    نوشته شده توسط Sir-Programmer در بخش C#‎‎
    پاسخ: 4
    آخرین پست: جمعه 01 دی 1391, 18:55 عصر
  4. نحوه کار با Background worker
    نوشته شده توسط محمد زارع در بخش VB.NET
    پاسخ: 1
    آخرین پست: یک شنبه 07 مهر 1387, 15:35 عصر
  5. کار با background worker در VB.net 2005
    نوشته شده توسط محمد زارع در بخش VB.NET
    پاسخ: 3
    آخرین پست: دوشنبه 15 مرداد 1386, 16:39 عصر

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

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