我正在我的页面上进行异步调用, 这大约需要1分钟。 我需要在调用完成后更改UI。 示例代码如下所示。
protected void Unnamed1_Click(object sender, EventArgs e)
{
apicasystemWPMCheckStatsService.CheckStatsServiceClient obj = new apicasystemWPMCheckStatsService.CheckStatsServiceClient();
string xmlOptionForGetCheckStats = "<options><mostrecent count='1'/><dataformat>xml</dataformat><timeformat>tz</timeformat></options>";
string checkId = "";
TextBox1.Text = TextBox1.Text + "test" + "\r\n";
obj.BeginGetCheckStats("admin@azuremonitoring", "Cu4snfPSGr8=", "PD6B685A0-006A-4405-951E-B24BB51E7966",
checkId, xmlOptionForGetCheckStats, new AsyncCallback(ONEndGetCheckStats), null);
TextBox1.Text = TextBox1.Text + "testdone" + "\r\n";
}
public void ONEndGetCheckStats(IAsyncResult asyncResult)
{
System.Threading.Thread.Sleep(3000);
TextBox1.Text = TextBox1.Text + "testcomplete" + "\r\n";
}
问题是如何在我的文本框中获得“testcomplete”。因为我的页面在此异步调用后没有被回发....
我目前的O / P: 测试 testdone
预期: 测试 testdone testcomplet
答案 0 :(得分:0)
简单回答:你不能那样做。因为一旦将ASPX页面发送到客户端,服务器就没有足够的方式与该页面通信。
然而,您可以使用AJAX执行此操作。在Unnamed1_Click
中设置Session
中的“标志”,表示异步操作正在等待处理。在ONEndGetCheckStats
设置“flag”以表示操作已完成。
将ASP.NET页面方法(Quick Tutorial)添加到代码隐藏中:
null
,只要它是Session
中的所有内容并返回您需要的文本在您的ASPX页面上,在Unamed1
(按钮btw的名称不好)按钮上连接一个客户端事件,该按钮启动客户端循环,使用该PageMethod检查状态。当状态不再是null
时,Javascript就会更改TextBox1
文字。