java 进度条 假死_C# 窗口无假死,进度条

本文介绍了如何在Java和C#中实现数据加载时的进度条显示,通过创建后台线程避免UI假死,同时实时更新进度条和状态标签。在`LoadData`方法中,数据加载与界面更新分离,使用`Invoke`确保更新在主线程中进行,保证了用户体验。
摘要由CSDN通过智能技术生成

DataTable table;int currentIndex = 0;int max = 10000;private void button1_Click(objectsender, EventArgs e)

{

buttonOK.Enabled= false;

Thread thread= new Thread(newThreadStart(LoadData));

thread.IsBackground= true;

thread.Start();

progressBar1.Minimum= 0;

progressBar1.Maximum=max;

}private voidLoadData()

{

SetLabelText("数据加载中...");

currentIndex= 0;

table= newDataTable();

table.Columns.Add("id");

table.Columns.Add("name");

table.Columns.Add("age");while (currentIndex

{

SetLabelText(string.Format("当前行:{0},剩余量:{1},完成比例:{2}%",

currentIndex, max- currentIndex, (Convert.ToDecimal(currentIndex) / Convert.ToDecimal(max) * 100).ToString()));

SetPbValue(currentIndex);

DataRow dr=table.NewRow();

dr["id"] =currentIndex;

dr["name"] = "张三";

dr["age"] = currentIndex + 5;

table.Rows.Add(dr);

currentIndex++;

}

SetDgvDataSource(table);

SetLabelText("数据加载完成");this.BeginInvoke(new MethodInvoker(delegate()

{

buttonOK.Enabled= true;

}));

}delegate void labDelegate(stringstr);private void SetLabelText(stringstr)

{if(label1.InvokeRequired)

{

Invoke(new labDelegate(SetLabelText), new string[] { str });

}else{

label1.Text=str;

}

}delegate voiddgvDelegate(DataTable table);private voidSetDgvDataSource(DataTable table)

{if(dataGridView1.InvokeRequired)

{

Invoke(new dgvDelegate(SetDgvDataSource), new object[] { table });

}else{

dataGridView1.DataSource=table;

}

}private delegate void pbDelegate(intvalue);private void SetPbValue(intvalue)

{if(progressBar1.InvokeRequired)

{

Invoke(new pbDelegate(SetPbValue), new object[] { value });

}else{

progressBar1.Value=value;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值