timer计时器问题
下面的代码执行时,timer和for循环怎么不是同步执行呢
private void button3_Click(object sender, EventArgs e)
{
timer1.Interval = 50;
progressBar1.Value = 0;
timer1.Enabled = true;
timer1.Start();
for (int i = 0; i < 476; i++)
{
for (int j = 1; j < 78; j++)
{
int id = 3888 + i;
string Station = "Station" + j;
string sqlselect = "select "+Station+" from BusStationRowG where id="+id;
SqlCommand comm2 = new SqlCommand(sqlselect, Consql.con);
Consql.con.Open();
SqlDataReader reader = comm2.ExecuteReader();
reader.Read();
if (reader[0].ToString() =="")
{
Consql.con.Close();
}
else
{
Consql.con.Close();
string sql = "Insert into BusStationColumn(BusNo,Station) select BusNo," + Station + " from BusStationRowG where id=" + id;
try
{
SqlCommand comm = new SqlCommand(sql, Consql.con);
Consql.con.Open();
comm.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
Consql.con.Close();
}
}
}
}
MessageBox.Show("完成1!");
}
private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.Value += 1;
if (progressBar1.Value >= 100)
{
timer1.Stop();
MessageBox.Show("完成2!");
}
}
我实行边执行往数据库中加数据,滚动条边前进,当数据填完时,滚动条也结束,跳出对话框提示完成,应该怎么改呀,求解!
------解决方案--------------------
因为你只有一个线程在做着事情
这种长时间的处理,不能放在button的时间里,否则会导致界面卡死
应该用异步来做这种事情,如果用了异步,那么进度条的问题就自然而然解决了
C# code
private void button1_Click(object sender, EventArgs e) {
new Thread(work).Start();
}
private void work()
{
for (int i = 0; i < 100; i++)
{
// 用sleep替代你的费时的操作
Thread.Sleep(100);
// 操作完成之后更新UI
this.Invoke(new Action(notify));
}
}
private void notify()
{
this.progressBar1.Value++;
}