استفاده از background worker و progress bar
سلام دوستان
من بعد از کلی جستجو باز هم متوجه نشدم چطوری میشه به صورت صحیح از background worker استفاده کرد
به طور مثال الان من از این کد دارم استفاده می کنم برای ارسال فایل به یک کانال تلگرامی :
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Picture Files|*.jpg";
ofd.FileName = String.Empty;
DialogResult result = ofd.ShowDialog();
if (result == DialogResult.OK)
{
filename = System.IO.Path.GetFileName(ofd.FileName);
path = System.IO.Path.GetDirectoryName(ofd.FileName);
byte[] file = System.IO.File.ReadAllBytes(path + "" + filename);
telegram.file_send(file, filename);
}
خب این کد به درستی کار می کنه اما وقتایی که فایل بزرگه اتفاقی که میفته اینه که برنامه هنگ می کنه تا زمانیکه پروسس کامل بشه
الان من میخوام دو تا چیز رو یاد بگیرم ...
اول اینکه اگر بشه با استفاده از background worker این عملیات رو انجام بدم و وضعیت پروسس کار رو هم توی یک progress bar نشون بدم
دوم اینکه برای زمان هایی که نمی خوام زیادی کاربر درگیر بشه یک پیام بدم که کار انجام شد و در واقع کار خودش در پس زمینه انجام بشه و کاربر رو معطل نکنه
ممنون میشم راهنمایی کنید تا قدم به قدم کار جلو بره
خودم کلی جستجو کردم به نتیجه مطلوب نرسیدم
نقل قول: استفاده از background worker و progress bar
از اساتید کسی نبود راهنمایی کنه یا حداقل لینک آموزشی چیزی بگذاره
متشکرم
نقل قول: استفاده از background worker و progress bar
دوستان این رو پیدا کردم
private void button1_Click_1(object sender, EventArgs e)
{
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerComple ted);
bgw.WorkerReportsProgress = true;
bgw.RunWorkerAsync();
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
int total = 57; //some number (this is your variable to change)!!
for (int i = 0; i <= total; i++) //some number (total)
{
System.Threading.Thread.Sleep(100);
int percents = (i * 100) / total;
bgw.ReportProgress(percents, i);
//2 arguments:
//1. procenteges (from 0 t0 100) - i do a calcumation
//2. some current value!
}
}
void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label1.Text = String.Format("Progress: {0} %", e.ProgressPercentage);
label2.Text = String.Format("Total items transfered: {0}", e.UserState);
}
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//do the code when bgv completes its work
}
خب الان یعنی اون کد خودم رو باید درون dowork بگذارم درسته ؟؟
بعد چطوری به progress bar بفهمونم که عملیات به اتمام رسیده؟؟
ممنون میشم راهنمایی بفرمایید
متشکرم
نقل قول: استفاده از background worker و progress bar
سلام
رخداد RunWorkerCompleted زمانی زخ میده که کارتون تموم شده باشه(تابع doworkکارش تموم بشه)
شما هرکاری که قراره بعد از اتمام عملیاتتون رخ بده رو تو این تابع بنویسید