PDA

View Full Version : سوال: پیشرفت ProgressBar همزمان با لود شدن DataBase در برنامه



farzadpmh
پنج شنبه 06 مرداد 1390, 16:34 عصر
میخوام وقتی database لود می شه به جای اینکه برناممه هنگ کنه یه ProgressBar پر بشه و با تموم شدن لود databse پر شدن اون هم تموم بشه.

morteza271
پنج شنبه 06 مرداد 1390, 17:39 عصر
شما باید برای این کار از تردها استفاده کنید.
یه جوریکه لود شدن دیتابیس رو توی یه ترد بذارید و پر شدن پروگرس بار رو توی یه ترد دیگر.
این یه نمونه برنامه برای این کار هستش :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Threading;
using FarsiMessageBox;

namespace thread_test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

Thread t1;

int count = 0;
float f = 0;
bool pb_visible = false;

private void btnMoveData_Click(object sender, EventArgs e)
{
t1 = new Thread(new ThreadStart(Move_Data));

pb_visible = true;

t1.Start();
}

public void Move_Data()
{
int row_count = 0;

string strconn_dthread = @"Data Source=.\MSSQLEXPRESS;Initial Catalog=db_thread;Integrated Security=True";

SqlConnection sqlconn2 = new SqlConnection(strconn_dthread);
string qry_read = @"select name,phonehome,mobile,address,city from Person";
string qry_write = @"insert into Customer(name,phonehome,mobile,address,city,number ) values(@name,@phonehome,@mobile,@address,@city,@nu mber)";

try
{
SqlCommand cmdqry1 = new SqlCommand(qry_read, sqlconn2);

SqlDataAdapter da = new SqlDataAdapter(cmdqry1);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
row_count = dt.Rows.Count;
int i = 0;
foreach (DataRow row in dt.Rows)
{
SqlCommand cmdqry2 = new SqlCommand(qry_write, sqlconn2);
cmdqry2.Parameters.AddWithValue(@"name", row[0].ToString());
cmdqry2.Parameters.AddWithValue(@"phonehome", row[1].ToString());
cmdqry2.Parameters.AddWithValue(@"mobile", row[2].ToString());
cmdqry2.Parameters.AddWithValue(@"address", row[3].ToString());
cmdqry2.Parameters.AddWithValue(@"city", row[4]);
cmdqry2.Parameters.AddWithValue(@"number", dt.Rows.Count);
sqlconn2.Open();
cmdqry2.ExecuteNonQuery();
sqlconn2.Close();
i++;
//f = i % 100;
f = (float)i / (float)row_count;
f = f * 100;
}
MessageBox.Show("Move");
pb_visible = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
}

private void timer1_Tick(object sender, EventArgs e)
{
textBox2.Text = f.ToString();
progressBar1.Visible = pb_visible;
progressBar1.Value = (int)f;
}
}
}

موفق باشید

علیرضا حسن زاده
پنج شنبه 06 مرداد 1390, 20:27 عصر
به این تاپیک نگاه کن
http://barnamenevis.org/showthread.php?296225-میزان-بارگذاری-دیتابیس&p=1301630&highlight=#post1301630