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

نام تاپیک: مشکل با شی Background Worker

  1. #1

    مشکل با شی Background Worker

    با سلام
    من مشکلی با شی BackGround Worker ندارم. فقط نمی دونم چجوری باید زمان انجام کارم رو در بیارم که بتونم برای کاربر در مدت انجام کار با یک progress Bar میزان پیشرفت کار رو نشون بدم. منظورم اینکه که مثلا من عملیات کپی یک فایل حجیم رو با BackGroundWorker می دم. اما می خوام در حین انجام کار میزان پیشرفت کار رو هم به کاربر نشون بدم.اگه ممکنه با مثال بگید خیلی بهتره.

    با تشکر

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

    نقل قول: مشکل با شی Background Worker

    با سلام دوست عزیز ساده است معمولا از این آبجکت ها برای انجام کاری تکراری در یک حلقه استفاده میشه حالا اگر عملیاتت ویژگی مثل lenth (طول)داره از اون استفاده کن در غیر این صورت یه متغییر تعریف کن و هر بار ++ و اون رو ارسال کن

  3. #3

    نقل قول: مشکل با شی Background Worker

    با سلام و تشکر
    همانطور که گفتم در یک عملیات مثل کپی یک فایل حجیم یا بکاپ گیری از دیتا بیس عملیت تکراری ندارم در ضمن اگه از یک متغییر استفاده کنم و اونو افزایش بدم چجوری زمان کل عملیات رو بدست بیارم تا بتونم مثلا یک Progress Bar به کابربر نشون بدم؟

    با تشکر

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

    نقل قول: مشکل با شی Background Worker

    دوست عزیز هرچی راه خودش رو داره اگه قراره یک کوئری رو دیتابیس بزنی خب باید استایل پروگرس بارت رو تغییر بدی اما مثلا برای کپی میشه به نحوی کار کرد که عملیات رو با پروگرس بار نشون داد
    مثلا

    public static void CopyFile(string FileSource, string FileDestination, ProgressBar progressBar1)
    {
    int NumRead;
    long FileLength;
    System.IO.FileStream From = new System.IO.FileStream(FileSource, System.IO.FileMode.Open);
    System.IO.FileStream To = new System.IO.FileStream(FileDestination,
    System.IO.FileMode.CreateNew);
    byte[] buffer = new byte[1024];
    FileLength = From.Length;
    progressBar1.Minimum = 0;
    progressBar1.Maximum = (int)FileLength;
    while (FileLength > 0)
    {
    System.IO.BinaryReader Reader = new System.IO.BinaryReader(From);
    NumRead = Reader.Read(buffer, 0, 1024);
    FileLength = FileLength - NumRead;
    System.IO.BinaryWriter Writer = new System.IO.BinaryWriter(To);
    Writer.Write(buffer, 0, NumRead);
    FileInfo aaaa = new FileInfo(FileSource);
    Int64 a = aaaa.Length;
    Int64 a1 = a /= 1000;
    //MessageBox.Show(a1.ToString());
    progressBar1.Maximum = int.Parse(a1.ToString());
    progressBar1.Value = progressBar1.Value + (NumRead /= 1000);

    Writer.Flush();
    }
    From.Close();
    To.Close();
    if (progressBar1.Value > 99)
    {
    progressBar1.Value = 0;
    MessageBox.Show("Copy Finished successfuly");
    }
    }



  5. #5

    نقل قول: مشکل با شی Background Worker

    خیلی ممنون
    منظورتون از استایل Progress bar چیه؟

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

    نقل قول: مشکل با شی Background Worker

    با سلام مجدد ببنین بعضی از کارها طوری هستن که نمیشه زمانی خاصی رو براشون محاسبه کرد یا طول مشخصی ندارن پس با تغییر استایل پروگرس بار به Marquee میتونین تا زمانی که اون کار در حال انجام هست از این سبک استفاده کنین
    موفق باشین

  7. #7

    نقل قول: مشکل با شی Background Worker

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

    ولی به هر حال از وقتی که گذاشتید، بسیار ممنونم.

  8. #8
    کاربر جدید
    تاریخ عضویت
    آبان 1385
    محل زندگی
    تهران
    سن
    36
    پست
    29

    نقل قول: مشکل با شی Background Worker

    راه حلی برای اندازه گیری دقیق زمان اجزای یک عملیات سراغ ندارم
    ولی میشه موردی زمان انجام عملیات رو محاسبه کرد.
    مثلا در زمان کپی کردن یه فایل حجیم به جای اینکه از تابع System.IO.File.Copy استفاده کنید میتونید از Stream ها استفاده کنید تا بتونید عملیات کپی فایل حجیم رو به تعدادی عملیات کوچکتر تقسیم کنید و زمان اجرای اونها رو اندازه بگیرید.
    مثلا یه فایل 10 گیگابایتی دارید و میخواید اونو کپی کنید. کافیه که زمان انتقال 10 مگ از این فایل رو انداره بگیرید و زمان به دست آمده رو ضربدر 1024 کنید.

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

  1. سوال: مشکل آزاد نشدن رم در هنگام استفاده از background worker
    نوشته شده توسط papeli_83 در بخش VB.NET
    پاسخ: 1
    آخرین پست: سه شنبه 05 شهریور 1392, 19:57 عصر
  2. سوال: مشکل آزاد نشدن رم در هنگام استفاده از background worker
    نوشته شده توسط papeli_83 در بخش C#‎‎
    پاسخ: 9
    آخرین پست: جمعه 01 شهریور 1392, 15:53 عصر
  3. مشکل کار با background worker
    نوشته شده توسط HOSSEINONLINE7 در بخش C#‎‎
    پاسخ: 5
    آخرین پست: جمعه 01 شهریور 1392, 00:27 صبح
  4. سوال: مشکل با background worker
    نوشته شده توسط SHD.NET در بخش C#‎‎
    پاسخ: 8
    آخرین پست: یک شنبه 10 دی 1391, 13:20 عصر
  5. مبتدی: مشکل در کار با BackGround Worker
    نوشته شده توسط Sir-Programmer در بخش C#‎‎
    پاسخ: 4
    آخرین پست: جمعه 01 دی 1391, 18:55 عصر

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

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