2011-10-01 53 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」,但概率是由於頁面沒有刷新測試完成,從來沒有進入文本框!!!!!你明白我的意思了嗎? –

相關問題