Tôi đang cố gắng hiển thị không đồng bộ dữ liệu trong bảng cập nhật trên trang web nơi các tác vụ truy xuất dữ liệu mất các thời điểm khác nhau. Tôi muốn cập nhật từng bảng để hiển thị dữ liệu trên trang sau mỗi tác vụ kết thúc.ASP.Net: Bảng cập nhật không đồng bộ Tải với hai bảng cập nhật
Tuy nhiên, bất kể tôi thử làm gì, tất cả các Bảng cập nhật đều thay đổi nội dung của họ sau khi tác vụ cuối cùng đã hoàn thành.
Ví dụ:
Tôi có hai nhiệm vụ:
- Một mà cố gắng để cập nhật một nhãn trong UpdatePanel1 sau 5 giây
- Một mà cố gắng để cập nhật một nhãn trong UpdatePanel2 sau 10 giây
Kết quả mong đợi là hav e chỉ nhãn trong UpdatePanel1 thay đổi sau 5 giây, tuy nhiên, cả hai cập nhật bảng cập nhật cùng một lúc, lúc 10 giây.
Cả hai bảng cập nhật đều được đặt thành updatemode = "Có điều kiện" và chúng được yêu cầu gửi lại từ javascript của khách hàng. Dưới đây là danh sách đầy đủ của ví dụ trên.
Tôi thiếu gì ở đây? Làm thế nào để tôi nhận được một bảng cập nhật để tải, và sau đó khác, có cả hai nhiệm vụ chạy không đồng bộ?
Cảm ơn,
TM
ASPX:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body onload="partialPostback();">
<script language="JavaScript" type="text/javascript">
function partialPostback() {
__doPostBack('UpdatePanel1', '');
__doPostBack('UpdatePanel2', '');
}
</script>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
5 sec:
<asp:UpdatePanel ID="UpdatePanel1" runat="server"
UpdateMode="Conditional" OnLoad="UpdatePanel1_Load">
<ContentTemplate>
<asp:Label ID="Label2" runat="server" Text="Label"/><br />
</ContentTemplate>
</asp:UpdatePanel><br />
10 sec:
<asp:UpdatePanel ID="UpdatePanel2" runat="server"
UpdateMode="Conditional" OnLoad="UpdatePanel2_Load">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"/><br />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
public partial class _Default : System.Web.UI.Page
{
Thread t1;
Thread t2;
protected override void OnPreRender(EventArgs e)
{
if (t1 != null)
{ t1.Join(); }
if (t2 != null)
{ t2.Join(); }
base.OnPreRender(e);
}
protected void Page_Load(object sender, EventArgs e)
{ }
protected void UpdatePanel1_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
ThreadStart tstart = new ThreadStart(DoWork1);
t1 = new Thread(tstart);
t1.IsBackground = true;
t1.Start();
}
}
protected void UpdatePanel2_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
ThreadStart tstart = new ThreadStart(DoWork2);
t2 = new Thread(tstart);
t2.IsBackground = true;
t2.Start();
}
}
private void DoWork1()
{
Thread.Sleep(5000);
this.Label2.Text = "Done in 5 sec!";
this.UpdatePanel1.Update();
}
private void DoWork2()
{
Thread.Sleep(10000);
this.Label1.Text = "Done in 10 sec!";
this.UpdatePanel2.Update();
}
}