给楼主一个参考代码吧,不是只有一种方法,但这个是没有问题的:
/// <summary>
/// 定义一个委托用来异步执行一个可能很耗时的方法
/// </summary>
private delegate void somedele();
/// <summary>
/// 要调用的某个很耗时的方法
/// </summary>
private void SomeMethod()
{
int i = 1000000000;
while (i > 0)
{
i--;
}
}
private void button3_Click(object sender, EventArgs e)
{
//先定义要显示出来的状态窗口
StateForm f = new StateForm();
//定义耗时方法的委托实例
somedele sd = new somedele(this.SomeMethod);
//开始耗时的操作
IAsyncResult ir = sd.BeginInvoke(f.CallBack, null);
//开始后立即把状态传给状态窗口
f.State = ir;
//立即显示出状态窗口
f.ShowDialog(this);
}
/// <summary>
/// 状态窗口的定义
/// </summary>
class StateForm : Form
{
private IAsyncResult m_State;
private AsyncCallback m_callBack;
private delegate void closeDelegate();
/// <summary>
/// 异步调用结束的时候调用以关闭窗口
/// </summary>
public AsyncCallback CallBack
{
get { return m_callBack; }
}
/// <summary>
/// 异步调用的状态
/// </summary>
public IAsyncResult State
{
set { m_State = value; }
}
/// <summary>
/// 状态窗口构造函数
/// </summary>
public StateForm()
{
m_callBack = new AsyncCallback(this.callBack);
}
/// <summary>
/// 回调方法定义
/// </summary>
/// <param name="ir"></param>
private void callBack(IAsyncResult ir)
{
this.closeForm();
}
/// <summary>
/// 关闭窗口
/// </summary>
private void closeForm()
{
if (this.InvokeRequired)
{
closeDelegate cd = new closeDelegate(this.closeForm);
this.Invoke(cd);
return;
}
this.Close();
}
}