你可以使用异步显示一个等待窗体,参考代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//运行时间较长的函数的委托定义
private delegate object someMethodDelegate(object someArg);
//运行时间较长的函数
private object someLongtimeMethod(object someArg)
{
//执行较长的操作
return someArg;
}
private void button1_Click(object sender, EventArgs e)
{
//为调用函数而声明委托的实例
someMethodDelegate sd = new someMethodDelegate(this.someLongtimeMethod);
//开始调用函数,可以带参数
IAsyncResult ir = sd.BeginInvoke( "测试参数 ", null, null);
//显示等待的窗口
Form fWait = new Form();
fWait.StartPosition = FormStartPosition.Manual;
fWait.Location = this.button1.Location;
fWait.Show(this);
//刷新这个等待的窗口
Application.DoEvents();
//循环检测是否完成了异步的操作
while (true)
{
if (ir.IsCompleted)
{
//完成了操作则关闭窗口
fWait.Close();
break;
}
}
//取函数的返回值
object retValue = sd.EndInvoke(ir);
System.Console.WriteLine(retValue);
}
}
{
public Form1()
{
InitializeComponent();
}
//运行时间较长的函数的委托定义
private delegate object someMethodDelegate(object someArg);
//运行时间较长的函数
private object someLongtimeMethod(object someArg)
{
//执行较长的操作
return someArg;
}
private void button1_Click(object sender, EventArgs e)
{
//为调用函数而声明委托的实例
someMethodDelegate sd = new someMethodDelegate(this.someLongtimeMethod);
//开始调用函数,可以带参数
IAsyncResult ir = sd.BeginInvoke( "测试参数 ", null, null);
//显示等待的窗口
Form fWait = new Form();
fWait.StartPosition = FormStartPosition.Manual;
fWait.Location = this.button1.Location;
fWait.Show(this);
//刷新这个等待的窗口
Application.DoEvents();
//循环检测是否完成了异步的操作
while (true)
{
if (ir.IsCompleted)
{
//完成了操作则关闭窗口
fWait.Close();
break;
}
}
//取函数的返回值
object retValue = sd.EndInvoke(ir);
System.Console.WriteLine(retValue);
}
}
二,这种方式要简便得多
Frm_flash f = new Frm_flash("正在检查更新程序请等待!!!");
f.Show();
Application.DoEvents();
obj_BL_MainForm.ValidateSystem();//做更新操作
f.Close();
f.Show();
Application.DoEvents();
obj_BL_MainForm.ValidateSystem();//做更新操作
f.Close();