异步委托问题!请指教!先谢谢大家了
上代码:HTML
<form id="form1" runat="server">
<div id="Div_1" runat="server">
<asp:TextBox ID="txtNum" runat="server" Width="388px"></asp:TextBox>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
<asp:Button ID="Bu1" Text="确定" runat="server" onclick="Bu1_Click" />
</div>
<div id="Div_2" runat="server" >
<asp:HyperLink ID="HyperLink1" runat="server">取消</asp:HyperLink>
</div>
</form>
后台代码:
delegate void DelegateName(Export excel);//定义委托
/// <summary>
/// 子线程
/// </summary>
/// <param name="excel"></param>
private void textboxnum( Export excel)
{
for (int i = 0; i < 10; i++)
{
Label1.Text += i;
}
}
/// <summary>
/// 显示
/// </summary>
/// <param name="excel"></param>
private void Vstrue(Export excel) {
DelegateName dn = new DelegateName(textboxnum);
AsyncCallback ac = new AsyncCallback(Vsfalse);
dn.BeginInvoke(excel,ac,dn);
Div_1.Style.Value = "display:block;";
Div_2.Style.Value = "display:none;";
}
/// <summary>
/// /隐藏图片
/// </summary>
private void Vsfalse(IAsyncResult iay) {
Div_1.Style.Value = "display:none;";
Div_2.Style.Value = "display:block;";
DelegateName dn = iay.AsyncState as DelegateName;
dn.EndInvoke(iay);
}
protected void Bu1_Click(object sender, EventArgs e)
{
Export excel = new Export();
Vstrue(excel);
}
}
为什么最后在运行了回调函数之后并没有相应的结果,页面还是显示Vstrue方法里面的结果
------解决方案--------------------
楼主是指这个吗?
Div_1.Style.Value = "display:none;";
Div_2.Style.Value = "display:block;";
我认为是不在UI线程的缘故。用this.dispatch.invoke试试
------解决方案--------------------
dn.BeginInvoke(excel,ac,dn);
DelegateName dn = iay.AsyncState as DelegateName;
要取得委托,其实可以不用把dn传递进去的,还可以这样转换得到
var asyResult = (System.Runtime.Remoting.Messaging.AsyncResult)iay;
var dn = (DelegateName)asyResult.AsyncDelegate;
dn.BeginInvoke(excel,ac,dn);
Div_1.Style.Value = "display:block;";
Div_2.Style.Value = "display:none;";
这三行代码和Vsfalse里的代码运行顺序是不一定的