小弟现在要做一个windows程序,窗体上就放一个button和一个label,点击button后处理后台数据,然后在label上显示“loading...”,数据处理完毕之后label显示“完成”。
哪位大侠或者高手帮小弟一把,谢谢~~~~~~~
哪位大侠或者高手帮小弟一把,谢谢~~~~~~~
解决方案 »
- 在C# winform窗体中如何嵌入Excel,并完成相应的修改和保存?
- 如何解除网络用户对本机文件的占用
- ToolStripDropDownButton单击时执行默认的子项怎样实现?
- 窗体设计器Designer.cs[designer]关闭后能不能再打开重新设计
- 容器控件事件发生器问题
- 如何取得精确到毫秒的系统时间?
- 菜鸟求助,如何获取数据库字段类型为float的值,等到晚上11点解决了马上给分
- 创建数据库时如何同时指订数据库文件的存放路径及此库的登陆用户?
- 服务器装了.net framework 1.1后,竟然没有adodb.dll这个东西???
- 请教,在一个工程里以(.csproj.user), (.csproj), (.sln), (.suo), (.projdata), (.scc)为后缀的文件都是些什么文件,有些什么用?
- 如果让主线程和一个子线程同时往窗体控件中写入数据??
- Excel开发的Add-in如何打包发布?
在你处理数据的方法或事件下
label.TEXT = “完成”;
mythread.Start();
mythread.Start();public void yourwork()
{
lable。txt="完成"
}
详细8楼的
Label1.Text = "loading...";
System.Windows.Forms.Application.DoEvents(); //重点
GO(); //这个函数是处理数据的函数
Label1.Text = "完成";
ThreadStart ts=new ThreadStart(ShowProcess);
Thread trd=new Thread(ts);
ts.Start();
/*数据处理代码*/
ts.Abort();
private void ShowProcess()
{
//显示loading窗体
}
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.Threading;//修改为你程序的默认命名空间
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); this.Load += new EventHandler(Form1_Load); button1.Click += new EventHandler(button1_Click);
} private void Form1_Load(object sender, EventArgs e)
{
label1.Text = "ok!";
} private delegate bool ExecuteHandler(); private void button1_Click(object sender, EventArgs e)
{
label1.Text = "loading...";
button1.Enabled = false; ExecuteHandler eh = new ExecuteHandler(Execute); IAsyncResult iaResult = eh.BeginInvoke(null, null); Application.DoEvents(); while (!iaResult.IsCompleted)
{
Application.DoEvents();
} button1.Enabled = eh.EndInvoke(iaResult);
label1.Text = "完成";
} //模拟业务实现
private bool Execute()
{
//模拟业务代码块
Thread.Sleep(3000);
return true;
}
}
}
//窗体里面加一个button和一个label控件,把这个代码拿进去试试
private void button1_Click(object sender, EventArgs e) //按钮点击
{
label1.Text = "Loading...";
Thread thd = new Thread(st); //st是线线程调用的方法,也就是你处理数据的方法
thd.Start();
}private void st()
{
Thread.Sleep(2000); //为了测试,线程停2秒,当然可以在这之前写你处理数据的代码 //因为线程里面不能访问控件,所以用Invoke调用ThreadEndCallback方法
this.Invoke(new Action<string>(this.ThreadEndCallback), "Loading完毕!");
}private void ThreadEndCallback(string str) //线程回调方法
{
label1.Text = str;
}
那你第一个事务开始时
控制前台label1让其显示Loading 1/N
第二个事务开始时
控制前台label1让其显示Loading 2/N
最后全部处理完成,控制前台label1让其显示 completed