PDA

View Full Version : سوال: به حرکت در آوردن progress بدون توقف



sadaf_
سه شنبه 02 اسفند 1390, 14:15 عصر
سلام
خواهشا اگر تکراریه پاکش نکنید
من خیلی دنبال چنین چیزی که می خوام می گردم اما چیزی پیدا نکردم
می خوام progress من به حرکت در بیاد و دقیقا بدونه کی عملیات من تمام می شه و به آخر برسه
یعنی عملیات من زمانی انجام شده که progress من طی یک روند ملایمی به آخر رسیده باشه
ممنون

mrbm_2007
سه شنبه 02 اسفند 1390, 15:33 عصر
اون پروگرس بار بیچاره که شعور نداره بفهمه کی قراره کار شما تموم بشه
فرض کن یک فرایند مثل پر کردن یک لیست باکس داری و این کار توی حلقه انجام میشه، توی هر با که حلقه اجرا میشه بر اساس مقدار فعلی و مقدار نهایی باید پروگرس بار رو جلو ببری
اگر کاری که مد نظرت هست رو بگی شاید بشه بهتر راهنمایی کرد

sadaf_
سه شنبه 02 اسفند 1390, 15:42 عصر
من وقتی select ی رو انجام می دم برنامه گیر می کنه می خوام کاری کنم که همزمان progress به کار بیافته و وقتی select تمام شد
progress به آخر برسه
ممنون

mrbm_2007
سه شنبه 02 اسفند 1390, 15:54 عصر
برای اینکه برنامه گیر نکنه باید از Thread استفاده کنی (یا همون بک گروند ورکر)
یا یه راه دیگه هم هست و اون اینکه وقتی پروگرس رو تغییر می دی، فرم رو رفرش کنی
----------
البته فکر کنم منظورت از select خوندن از دیتابیس باشه
من در این مورد اطلاع زیادی ندارم

mrbm_2007
سه شنبه 02 اسفند 1390, 16:02 عصر
یه راه دیگه هم هست (که البته یه جور پاک کردن صورت مسئله هست)
اینکه پروگرس بتر رو بذاری روی حالت marquee

sadaf_
سه شنبه 02 اسفند 1390, 16:02 عصر
بله خواندن اطلاعات از دیتابیس
دز موزد همون thread لطفا منو راهنمایی کنید که بتونه همزمان progress رو هم پر کنه
ممنون

mrbm_2007
سه شنبه 02 اسفند 1390, 16:33 عصر
لود کردن دیتا رو توی Backgroundworker بذار
ولی مشکل اینجاست که چجوری می خوای بفهمی چقدر از کار لود کردن پیش رفته؟

spring69
سه شنبه 02 اسفند 1390, 17:07 عصر
سلام شما میتونید از کدی شبیه به این کد استفاده کنید:
private int Rowscount;
readonly DataTable dt = new DataTable();
private void button1_Click(object sender, EventArgs e)
{
var cnn = new SqlConnection(@"Data Source=.\sqlexpress;initial catalog=shop;integrated security=true;");
var cmd = new SqlCommand("select * from TblProducts", cnn);
var cmdForCount = new SqlCommand("select count(*) from TblProducts", cnn);
cnn.Open();
Rowscount = Convert.ToInt32(cmdForCount.ExecuteScalar());
progressBar1.Maximum = Rowscount;
var ad = new SqlDataAdapter(cmd);
dt.RowChanged += dt_RowChanged;
ad.Fill(dt);
cnn.Close();
dataGridView1.DataSource = dt;
}
private void dt_RowChanged(object sender, DataRowChangeEventArgs e)
{
if (e.Action == DataRowAction.Add)
{
progressBar1.Value += 1;
}
rowCouter = dt.Rows.Count;
}

sds1920
سه شنبه 02 اسفند 1390, 21:29 عصر
ميتوني رکوردها رو يکي يکي با DataReader بخوني و به دنبالش يکي يکي مقدار progress رو اضافه کني.البته مقدار max را براي progress برابر با تعداد کل رکوردهاتون بذاريد.

sadaf_
چهارشنبه 03 اسفند 1390, 11:37 صبح
من هنوز مشکل رو نتونستم حل کنم
چطوری می تونم همزمان هم اطلاعات در حال پردازش باشه وهم پروسس در گردش باشه
خواهشا کمک کنید
ممنون

spring69
چهارشنبه 03 اسفند 1390, 11:41 صبح
من هنوز مشکل رو نتونستم حل کنم
چطوری می تونم همزمان هم اطلاعات در حال پردازش باشه وهم پروسس در گردش باشه
خواهشا کمک کنید
ممنون
منظور شما از پردازش چیه؟
اگه منظور پر کردن دیتاتیبل هست که من نمونه گذاشتم.
مشکل رو دقیق توضیح بدید که جواب کامل بگیرید؟

sadaf_
چهارشنبه 03 اسفند 1390, 11:50 صبح
من اطلاعات رو از بانک sql
select می کنم و چون گزارشات به مراتب سنگین تر می شوند می خوام پروسس به گردش در بیاد
و وقتی که اطلاعات رو select کردم و به فرم انتقال دادم پروسس به انتها رسیده باشه
همین

kimm66
چهارشنبه 03 اسفند 1390, 14:03 عصر
لطفا پست "ساخت loading برای حالت انتظار" رو نگاه کنید مشکلتون حل میشه.