我是一個很長一段時間的程序員,在過去一個月剛剛開始web開發。我在IIS 7.0上使用ASP.NET 4.0和C#。到目前爲止,我沒有遇到任何問題,並且已經實現了諸如JQuery之類的庫。在ASP.NET 4.0中執行冗長的函數
我正在慢慢學習網絡的方式,我習慣於頁面張貼和AJAX實現。我最近試圖添加功能到我的網站,即使在Stack Overflow和Google的幫助下,我也無法實現。
請允許我向框架問題:
我試圖創建一個Web表單,讓我點擊一個按鈕上的功能,然後對主機名和ping的列表服務器查詢數據庫結果中的每個名稱。每個循環處理ping,然後將結果寫入數據庫。一路上,雖然不是完全需要,但我有興趣從循環中檢索進度,以便用「Pinging SomeHostname ...」之類的信息更新頁面。
我嘗試過使用UpdatePanels,UpdateProgress和各種觸發器。在我的所有經驗中,頁面鎖定或在調試期間收到超時。
我最後的(非工作)解決方案是這樣的:
Web窗體:
<asp:UpdatePanel ID="PingUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="btnPingAll" runat="server" Text="Ping All" OnClick="PingAll_Click"></asp:Button>
<asp:Timer ID="pingUpdateTimer" OnTick="pingUpdateTimer_Tick" Interval="1000" runat="server" />
<div id="pingStatus" class="pingStatusBox" runat="server">
<asp:Label ID="hostName" runat="server" Text="Initializing ping..."></asp:Label>
</div>
</ContentTemplate>
-- TRIGGERS HERE --
</asp:UpdatePanel>
背後的代碼:
protected void PingAll_Click(object sender, EventArgs e)
{
Thread pingThread = new Thread(new ThreadStart(PingHosts));
pingThread.IsBackground = true;
pingThread.Start();
}
private void PingHosts()
{
//Get information DataTable
if (dataTable != null)
{
foreach (DataRow row in dataTable.Rows)
{
// Set label
hostName.Text = row[0].ToString();
PingUpdatePanel.Update();
// Ping stuff and update DB
}
}
}
任何人都可以指向我如何在網絡中正確處理這個問題編程/ ASP.NET?此信息稍後可用於說明生成冗長的報告。
讓我知道如果我可以更清楚,我感謝任何幫助!
SignalR .......? – danludwig
檢查了這個http://stackoverflow.com/questions/857999/asp-net-update-ui-using-multi-thread –
Danludwig,我需要兼容所有的方式回到IE7。 SignalR能夠走得遠嗎?我知道它使用HTML5。格斯,這將工作得很好,但不幸的是我需要從處理循環中取得進展。我無法執行計時器對象中的所有計算。 – ubertastic