我的界面上有1个按钮和两个TextBox,目的是想通过异步的方式给TextBox1赋值,TextBox2显示是否处理成功。
下面是我的代码,调试两个TextBox可以得到值,但界面的显示为空,请帮忙改一下,让界面也显示。public partial class Default3 : System.Web.UI.Page
{ private delegate bool AsyncMethodCaller(); protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
AsyncMethodCaller caller = new AsyncMethodCaller(this.AssignText);
IAsyncResult result = caller.BeginInvoke(new AsyncCallback(this.Callback), caller);
} private bool AssignText()
{
TextBox1.Text = "1";
return true;
} private void Callback(IAsyncResult ar)
{
AsyncMethodCaller caller = (AsyncMethodCaller)ar.AsyncState;
bool loginstate = (bool)caller.EndInvoke(ar);
if (loginstate)
TextBox2.Text = "成功";
else
TextBox2.Text = "失败"; }
}
其实,我们的项目要求是一项比较耗时间的操作通过异步来实现,想在系统处理这个操作的同时可以浏览系统别的页面。这个处理完成后提示用户已经完成,我就想到上面的方法,但是初涉异步编程,请大家说一下,是不是应该用上面的方法。
下面是我的代码,调试两个TextBox可以得到值,但界面的显示为空,请帮忙改一下,让界面也显示。public partial class Default3 : System.Web.UI.Page
{ private delegate bool AsyncMethodCaller(); protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
AsyncMethodCaller caller = new AsyncMethodCaller(this.AssignText);
IAsyncResult result = caller.BeginInvoke(new AsyncCallback(this.Callback), caller);
} private bool AssignText()
{
TextBox1.Text = "1";
return true;
} private void Callback(IAsyncResult ar)
{
AsyncMethodCaller caller = (AsyncMethodCaller)ar.AsyncState;
bool loginstate = (bool)caller.EndInvoke(ar);
if (loginstate)
TextBox2.Text = "成功";
else
TextBox2.Text = "失败"; }
}
其实,我们的项目要求是一项比较耗时间的操作通过异步来实现,想在系统处理这个操作的同时可以浏览系统别的页面。这个处理完成后提示用户已经完成,我就想到上面的方法,但是初涉异步编程,请大家说一下,是不是应该用上面的方法。
解决方案 »
- 求助:如何锁定一个Form的主界面?
- 一个基础问题,帮忙解答
- 数据库中怎么样来设计 存货数量?
- Rdlc报表中的table尺度用cm,而控件DataGridView中用象素,现在想做个与Rdlc中的Table一样宽度的Grid,不知乍样转换单位,
- 如何遍历menuStrip,查看每个控件的Tag属性?
- 有人用C#写过CRC校验么,给段代码好么,急用
- C#.Net网站SQL Server数据库中文问题
- 关于三层结构DbHelperSQL连接不同数据库的问题,棘手
- 对图片的引用如何释放内存资源?
- 一个关于在文本框中的keypress事件中处理字符的问题,谢谢
- AspNetPager分页控件是怎么引用进来的,为什么我的VS2005没有。
- 如何调试Installer安装程序类?
{
void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ClientScriptManager cm = Page.ClientScript;
String cbReference = cm.GetCallbackEventReference(this, "args", "ReceiveServerData", "");
String callbackScript = "function CallServer(args, context) {" + cbReference + "; }";
cm.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);
}
} private string returnStr; public void RaiseCallbackEvent(String eventArgument)
{
//do something with return argument
returnStr = eventArgument.ToUpper();
returnStr += "\n异步实现";
//Response.Write(returnStr);
return;
} //function that sends result?
public string GetCallbackResult()
{
return returnStr;
}
}
------------------------------------------------
Server端可以异步地处理较为缓慢的操作, 怎么实现,我上面的代码就是想把AssignText作为那个缓慢的操作,为什么实现不了
HTML:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox></div>
</form>
</body>
</html>
.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls; public partial class Default3 : System.Web.UI.Page
{ private delegate bool AsyncMethodCaller(); protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
AsyncMethodCaller caller = new AsyncMethodCaller(this.AssignText);
IAsyncResult result = caller.BeginInvoke(new AsyncCallback(this.Callback), caller);
} private bool AssignText()
{
TextBox1.Text = "1";
return true;
} private void Callback(IAsyncResult ar)
{
AsyncMethodCaller caller = (AsyncMethodCaller)ar.AsyncState;
bool loginstate = (bool)caller.EndInvoke(ar);
if (loginstate)
TextBox2.Text = "成功";
else
TextBox2.Text = "失败";
}
}
还有,所有的BeginInvoke要有对应的EndInvoke(当然也可以放在Callback里面)