2011-10-01 21 views
0

我在我的页面上有异步呼叫, 这大约需要1分钟。 我需要在呼叫完成后更改UI。 示例代码如下。如何在异步调用后更改我的页面的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("[email protected]", "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

答案很简单:你不能这样做。因为一旦ASPX页面发送到客户端,服务器就无法与该页面进行通信。

但是,您可以使用AJAX来做到这一点。在您的Unnamed1_Click中,在Session中设置了一个“标志”,表示异步操作正在等待处理。在您的ONEndGetCheckStats设置“标志”来表示操作已完成。 ASP.NET页面的方法(Quick Tutorial)添加到您的代码隐藏:

  • 检查操作是否挂起并返回null wehen是
  • 当操作完成从Session删除一切并返回你需要

在您的ASPX页面丝上来就Unamed1一个客户端事件(一个可怜的名字一个按钮BTW)按钮启动客户端的循环检查使用PageMethod的状态文本。当状态不是null不再使用Javascript来更改TextBox1文本。

+0

嘿,Juhan,我知道这件事,顺便说一句,这只是示例代码,所以我的按钮名称是不正确的,在WebMethod我无法访问控件。和我的网页有3-4个用户控件和访问这些和代码也很复杂,所以我需要一些其他方式。 –

+0

事情是,COntrol正在受到影响,就像我的文本框有Text属性来“测试testdone testcomplet”,但概率是由于页面没有刷新测试完成,从来没有进入文本框!!!!!你明白我的意思了吗? –

相关问题