2012-04-12 43 views
0

我有以下情況:ASP.net C#返回JS警報從另一個線程

在Default.aspx.cs

void Button1_Click(Object Sender, EventArgs e) 
{ 
    new Thread(() =>LongProcessFunction()).Start(); 
    // I am running this function in a new thread so the end user does not wait till the end of the process 
} 

public void LongProcessFunction() 
{ 
    //some code with long process 
    // When done alert the user no matter what he's doing on the website. 
    System.Web.UI.ScriptManager.RegisterStartupScript(this, GetType(), "Alert","alert('Function is Complete')" , true);  
} 

的問題是,我需要這個警報腳本,爲最終用戶。 我假設它在另一個線程上運行並且沒有顯示。

+0

長時間運行多久?如果時間不長,您可以發出ajax請求。 – 2012-04-12 14:26:13

+0

這是一個非常長的數據導出功能,需要38秒才能達到40,而用戶並不需要等待它,他將數據導出到另一個數據庫! – user1329310 2012-04-12 14:28:13

回答

0

您應該能夠在長時間運行的函數結束時設置會話或應用程序變量,這表示過程已完成。然後你可以檢查這個變量是否已經在每個頁面加載時設置(理想情況下是在一個繼承自Page的基類中),如果已經設置,則取消設置並調用你的RegisterStartupScript代碼。

+0

你好Lan, 其實這就是我迄今爲止所做的。我已經分配了一個靜態變量,並且在我測試的masterPage_load上,如果靜態變量是「」或者有消息,然後再次將靜態變量重置爲「」。這隻有在回發發生時纔有效。在我的情況下,用戶可能不會做任何可能導致回發的事情,並且我不能強制回發,因爲我可能會中斷用戶操作。我想在主頁上實現一個計時器,並在Tick上做靜態消息的測試,但由於某種原因沒有工作!任何想法 ? – user1329310 2012-04-13 05:14:10