如何在异步调用后更改页面的UI?

时间:2011-10-01 11:21:19

标签: c# asp.net wcf asynchronous

我正在我的页面上进行异步调用, 这大约需要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

1 个答案:

答案 0 :(得分:0)

简单回答:你不能那样做。因为一旦将ASPX页面发送到客户端,服务器就没有足够的方式与该页面通信。

然而,您可以使用AJAX执行此操作。在Unnamed1_Click中设置Session中的“标志”,表示异步操作正在等待处理。在ONEndGetCheckStats设置“flag”以表示操作已完成。 将ASP.NET页面方法(Quick Tutorial)添加到代码隐藏中:

  • 检查操作是否处于暂挂状态,并返回null,只要它是
  • 操作完成后会删除Session中的所有内容并返回您需要的文本

在您的ASPX页面上,在Unamed1(按钮btw的名称不好)按钮上连接一个客户端事件,该按钮启动客户端循环,使用该PageMethod检查状态。当状态不再是null时,Javascript就会更改TextBox1文字。