我怎么能改变我的页面的UI后异步调用

本文关键字:UI 异步 调用 能改变 我的 | 更新日期: 2023-09-27 18:10:07

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

预期:测试testdonetestcomplet

我怎么能改变我的页面的UI后异步调用

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

你可以用AJAX做到这一点。在Unnamed1_Click中,在Session中设置一个"标志",表示异步操作正在等待。在你的ONEndGetCheckStats设置"标志",表示操作已经完成。添加ASP。. NET页面方法(快速教程)到代码后面:

  • 检查操作是否挂起,当
  • 时返回null
  • 当操作完成时,从Session中删除所有内容并返回您需要的文本

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