关于WebForm中异步程序的问题。
有下面的程序,作用是在点击页面上的Button之后,禁用所有的Button,直到服务器端的异步回调之后再启用Button。
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName.Equals("bind"))
{
//利用委托去执行你的函数
AsyncDelegate dlgt = new AsyncDelegate(BeginTest);
//利用委托的BeginInvoke函数,第一个参数是回调函数,有需要的可以自己加,第二个是一个Object对象,好象是回调函数需要的参数什么的东西,这里我没有用到,所以全为null
IAsyncResult ar = dlgt.BeginInvoke(new AsyncCallback(CallbackMethod), dlgt);
foreach(DataGridItem dgi in DataGrid1.Items)
{
Control c = dgi.FindControl("LinkButton2");
if(c != null)
{
if(c is LinkButton)
{
((LinkButton)c).Enabled = false;
}
}
}
}
}
private void BeginTest()
{
Thread.Sleep(3000);
}
private void CallbackMethod(IAsyncResult ar)
{
// Retrieve the delegate.
AsyncDelegate dlgt = (AsyncDelegate) ar.AsyncState;
// Call EndInvoke to retrieve the results.
dlgt.EndInvoke(ar);
//下面要刷新页面
//Server.Transfer("~/WebApplication1/WebForm1.aspx");
}
现在的问题是,页面在异步结束之前就已经返回了。我如何能够在异步回调之后通知客户端的页面我把事情做完了,并且将所有的Button置为可用呢?