给楼主一个参考代码吧,不是只有一种方法,但这个是没有问题的:
/// <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();
}
}
/// <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();
}
}
解决方案 »
- c# winform委托事件的问题
- 急,问一下下载文件后如何打开
- 求助关于treeview无法显示绑定后的图标
- c#利用socket向远程服务器传送
- Button的Click事件
- 非常头痛的问题
- C#4.0以后的版本会是什么样子,大家有这方面的信息吗?
- SQL怎么让回复时间显示为:1小前,2小前,1天前,.......
- WinForm中,我想要在DataGrid中让用户弹出一个窗口选择,并且读取用户选择的资料,写入到DataGrid中,大家有什么好办法?
- 如何解决调用Invalidate()时出现的界面闪烁问题?
- 我想要做两个DataGrid 数据导出到exce 每个都支持分页
- 请问如何识别软回车,自定义文本控件的换行问题
然后把句柄传入主窗体,主窗体Load或者show总之就是你的加载代码运行完了以后,
把这个窗体Close掉