مشکل با شی Background Worker
با سلام
من مشکلی با شی BackGround Worker ندارم. فقط نمی دونم چجوری باید زمان انجام کارم رو در بیارم که بتونم برای کاربر در مدت انجام کار با یک progress Bar میزان پیشرفت کار رو نشون بدم. منظورم اینکه که مثلا من عملیات کپی یک فایل حجیم رو با BackGroundWorker می دم. اما می خوام در حین انجام کار میزان پیشرفت کار رو هم به کاربر نشون بدم.اگه ممکنه با مثال بگید خیلی بهتره.
با تشکر
نقل قول: مشکل با شی Background Worker
با سلام دوست عزیز ساده است معمولا از این آبجکت ها برای انجام کاری تکراری در یک حلقه استفاده میشه حالا اگر عملیاتت ویژگی مثل lenth (طول)داره از اون استفاده کن در غیر این صورت یه متغییر تعریف کن و هر بار ++ و اون رو ارسال کن
نقل قول: مشکل با شی Background Worker
با سلام و تشکر
همانطور که گفتم در یک عملیات مثل کپی یک فایل حجیم یا بکاپ گیری از دیتا بیس عملیت تکراری ندارم در ضمن اگه از یک متغییر استفاده کنم و اونو افزایش بدم چجوری زمان کل عملیات رو بدست بیارم تا بتونم مثلا یک Progress Bar به کابربر نشون بدم؟
با تشکر
نقل قول: مشکل با شی 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");
}
}
نقل قول: مشکل با شی Background Worker
خیلی ممنون
منظورتون از استایل Progress bar چیه؟
نقل قول: مشکل با شی Background Worker
با سلام مجدد ببنین بعضی از کارها طوری هستن که نمیشه زمانی خاصی رو براشون محاسبه کرد یا طول مشخصی ندارن پس با تغییر استایل پروگرس بار به Marquee میتونین تا زمانی که اون کار در حال انجام هست از این سبک استفاده کنین
موفق باشین
نقل قول: مشکل با شی Background Worker
خیلی ممنون
اگه می تونستید نمونه فایل هم بزارید خیلی خوب میشد.
ولی به هر حال از وقتی که گذاشتید، بسیار ممنونم.
نقل قول: مشکل با شی Background Worker
راه حلی برای اندازه گیری دقیق زمان اجزای یک عملیات سراغ ندارم
ولی میشه موردی زمان انجام عملیات رو محاسبه کرد.
مثلا در زمان کپی کردن یه فایل حجیم به جای اینکه از تابع System.IO.File.Copy استفاده کنید میتونید از Stream ها استفاده کنید تا بتونید عملیات کپی فایل حجیم رو به تعدادی عملیات کوچکتر تقسیم کنید و زمان اجرای اونها رو اندازه بگیرید.
مثلا یه فایل 10 گیگابایتی دارید و میخواید اونو کپی کنید. کافیه که زمان انتقال 10 مگ از این فایل رو انداره بگیرید و زمان به دست آمده رو ضربدر 1024 کنید.