2011-01-06 64 views
0

我構建了一個顯示圖表的小型web應用程序。我認爲這對應用程序的超級用戶來說可能很有用,可以完成一次完整的數據刷新,但是這個過程大約需要10分鐘才能完成。我在想也許用戶可能會點擊一個按鈕,從一個新線程開始進行數據刷新,隨後的點擊將終止該線程並重新啓動數據填充過程。然後,用戶可以自由瀏覽網站並在數據填充時查看圖表。如何在C#web應用程序中管理線程?

是否有一個簡單的方法來完成這樣的事情?

回答

1

好的,我沒有使用任何答案,所以這就是我做的。我決定,如果後續點擊會終止而不是當前正在執行的點擊會更好。謝謝你的答案。

//code behind 
protected void butRefreshData_Click(object sender, EventArgs e) 
{ 
    Thread t = new Thread(new ThreadStart(DataRepopulater.DataRepopulater.RepopulateDatabase)); 
    t.Start();  
} 

//DataRepopulater.cs 
namespace DataRepopulater 
{ 
    public static class DataRepopulater 
    { 
    private static string myLock = "My Lock"; 
    public static void RepopulateDatabase() 
    { 
     if(Monitor.TryEnter(myLock)) 
     { 
      DoWork(); 
      Monitor.Exit(myLock); 
     } 
    } 
} 
1

你可以扭曲ASP.NET來做這種事情,但它違反了ASP.NET開發的一些很好的通用規則 - 並且真的可能導致服務器場中的問題。

因此,最明顯的路線是在Web服務中完成這項工作。如果需要,您可以讓該方法返回一大塊HTML。您還可以添加狀態方法來查看線程的進展情況。

+0

好吧,所以我把DB refesh代碼放入一個WebService。我將如何消費這個?客戶端上的Javascript或服務器上的OnClick事件? – 2011-01-07 16:39:22

+0

如果您設計web方法以使用JSON(非常容易),JQuery的「ajax」方法運行良好。如果您不小心,回發和更新面板可能會變得非常慢,所以我強烈希望儘可能使用javascript。 – 2011-01-07 17:21:24

1

其他選項包括:將緊張的處理交給數據庫服務器(聽起來像這樣可能會很好地利用OLAP),或者另一個便宜的技巧可能是設置點擊以啓動運行的計劃任務服務器。你能提供一些關於環境的更多細節嗎?單個服務器?數據存儲平臺,.net的版本?

相關問題