读书人

timer计时器有关问题

发布时间: 2012-01-07 21:41:56 作者: rapoo

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++;        } 

读书人网 >C#

热点推荐