有下面的程序,作用是在点击页面上的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置为可用呢?
{
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置为可用呢?
解决方案 »
- 用图片保存流Stream st = response.GetResponseStream();
- C# 更新GataGridView.SelectedRows[i].Cells[1].Value的问题。
- [IE编程]moveStart和moveEnd方法。
- 使用PagedDataSource对datalist进行分页,但是代码有错误。
- 如何屏蔽鼠标的双击事件
- 很简单的字符串拆分问题
- 冲击波
- C#反编译代码回归正编译
- 大家都用一些什么做项目管理软件??
- C# FDFS client 下载的时候如果buffer 设置大于1024 得到的文件不正确,无法正常打开,请教高手看看,谢谢,代码如下
- 求助 在vs2003中构建dll文件和析构函数应用问题
- C#中 VSFlexGrid 的 DataSource 怎么动态设置?
1.不使用导步调用,开发时使用Response.Flush先把数据发向客户端(要包含使控件enable=false的javascript脚本,然后执行完ar方法后再Response.end(比较麻烦)
2.使用javascript.
this.Button1.Attributes.Add("onclick","this.disabled=true;"+GetPostBackEventReference(this.Button1)+";");题外话:
异步委托这样很简单阿
protected delegate void AsyncDelegate();
private void BeginTest()
{
Thread.Sleep(3000);
}private void Button1_Click(object sender, System.EventArgs e)
{
AsyncDelegate dlgt = new AsyncDelegate(BeginTest);
IAsyncResult ar = dlgt.BeginInvoke(null,null);
dlgt.EndInvoke(ar);
this.Button1.Enabled = true;
}
webform要实现这样的回调,只有用javascript不断刷新页面,你可以搜索一下ajax的例子,和这个差不多。
foreach(DataGridItem dgi in dgFileList.Items)
{
Control c = dgi.FindControl("Button1");
if(c != null)
{
if(c is Button)
{
string strCommand = "disableOtherSubmit();" + GetPostBackEventReference(c) + ";";
((Button)c).Attributes.Add("onclick", strCommand);
}
}
}