private void button1_Click(object sender, EventArgs e)
{
label1.Text = "正在打开数据库......";//1
remote.con_open();
label1.Text = "正在取数据库表";//2
progressBar1.Value = 30;
MyDS_Grid = remote.getDataSet("借还表", "select *from 借还表");
dataGrid1.DataSource = MyDS_Grid.Tables[0];//上面两句是把数据显示到datagrid中
label1.Text = "将要据库表......";//3
progressBar1.Value = 80;
remote.con_close();
progressBar1.Value = 100;
label1.Text = "关闭据库表";//4
// if (remote.Pull("Users", "select *from Users")) { MessageBox.Show("下载成功"); }
//else { MessageBox.Show("下载失败"); }
}问题是为什么一个lable的显示值不是一步一步来的(也就是不是从1,2,3,4那样显示) 。而是直接显示出最后一步“关闭据库表”。。求解答
解决方案 »
- C# 窗体传值问题
- 如何利用IIS把服务器上的文件复制到本地上来
- dll窗体调用问题,急等!!!!!
- 搜索文章好难用。
- 如何在某个FORM中引用另外一个FORM中控件(变量)?
- C#开发Windows窗体程序合适吗?
- DataGrid or ds["table1"]里面的字段?
- 我在asp.net中把DATAGRID控件放到ASPNET页面中,用代码填充后,怎么显示不出来呢?
- 【求助】socket变成出现【在其上下文中,该请求的地址无效】
- 听说有个.net上的visual foxpro 8,真的么?
- 普通类控制winform窗体中控件值的问题.
- C# 我做一个数据库的程序 用什么方法连接数据库比较好
换句话说 我要是 在里面加个
Thread.sleep(1000);的话 它就非得等到1000之后 才会去真正做 按钮事件
你在显示之前加上Application.DoEvents();
就可以显示出来了。private void button1_Click(object sender, EventArgs e)
{
ShowMessage( "正在打开数据库......");//1
remote.con_open();
ShowMessage( "正在取数据库表");//2
progressBar1.Value = 30;
MyDS_Grid = remote.getDataSet("借还表", "select *from 借还表");
dataGrid1.DataSource = MyDS_Grid.Tables[0];//上面两句是把数据显示到datagrid中
label1.Text = "将要据库表......";//3
progressBar1.Value = 80;
remote.con_close();
progressBar1.Value = 100;
ShowMessage( "关闭据库表");//4
// if (remote.Pull("Users", "select *from Users")) { MessageBox.Show("下载成功"); }
//else { MessageBox.Show("下载失败"); }
}Private void ShowMessage(string msg)
{
Application.DoEvnents();
label1.Text =msg;
}
有一部代码没改完,自己看一下效果吧。希望可以帮到你。
label1.Text = "正在取数据库表";//2
progressBar1.Value = 30;
这样修改后,用户界面并未刷新,因为你没给它时间刷新,应用程序赶着执行下面的过程呢,所以你这时插入
Application.DoEvnents();
用户界面就会先刷新刚才的改变,然后再执行下面的过程。
{
// Application.DoEvents(); label1.Text = str; progressBar1.Value = i;
Application.DoEvents();
}这样写效果更好一些 但是并没有达到我想要的效果,有一种思路 但是写不出代码思路:首先,新起一个线程,用于更新你的进度条,不然你的界面会卡死。然后在初始化方法里设置一些标志位,然后起个timer,循环检测,每当一个标志位到达的时候,更新一下你的进度条。比如说你设置了5个标志位,那么你的进度条就分5步走,在进度条的属性里可以设置。
写一个公用的进度条更新函数
void UpdateProBar(int flag),把标志位送进去。调用progreesbar的update函数更新