2009-05-13 28 views
6

Tôi có một trang web ASP.NET chứa sauasp.net cập nhật giao diện người dùng sử dụng multi-thread

<asp:UpdatePanel ID="UpdatePanel1" runat="server" > 
    <ContentTemplate> 
      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>     
    </ContentTemplate>    
</asp:UpdatePanel> 

tôi đã tạo ra một chức năng thread. Và trong quá trình thực hiện chức năng này, tôi muốn cập nhật một số điều khiển trên giao diện người dùng.

protected void Page_Load(object sender, EventArgs e) 
{ 
    new Thread(new ThreadStart(Serialize_Click)).Start(); 
} 
protected void Serialize_Click() 
{ 
    for (int i = 1; i < 10; i++) 
    { 
     Label1.Text = Convert.ToString(i); 
     UpdatePanel1.Update(); 
     System.Threading.Thread.Sleep(1000); 
    } 
} 

Làm cách nào để cập nhật điều khiển web trong quá trình thực hiện chuỗi? tôi có cần buộc "UpdatePanel1" gửi trả lại không? làm sao?

+0

Hãy làm rõ/cần thêm thông tin. Khi nào thread này được khởi động (một lần cho mỗi yêu cầu http, một lần cho mỗi máy chủ, cái gì khác?) Bạn đang nói về một số yêu cầu dữ liệu không đồng bộ trong vòng đời trang? –

+0

Xin vui lòng xem câu trả lời của tôi, như bạn dường như có một sự hiểu lầm tổng của vòng đời trang asp.net và có thể http nói chung. –

Trả lời

6

Bạn sẽ cần phải sử dụng một bộ đếm thời client-side (hoặc một số phương pháp khác) để có trình duyệt yêu cầu máy chủ để cập nhật, chẳng hạn như ví dụ đơn giản này:

<asp:UpdatePanel ID="up" runat="server">   
    <ContentTemplate> 
     <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="timer_Ticked" /> 
     <asp:Label ID="Label1" runat="server" Text="1" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Sau đó, trong codebehind của bạn:

protected void timer_Ticked(object sender, EventArgs e) 
{ 
    Label1.Text = (int.Parse(Label1.Text) + 1).ToString(); 
} 

Nếu bạn có quy trình nền đang cập nhật một số trạng thái, bạn cần lưu trữ trạng thái chia sẻ trong phiên, bộ nhớ cache http hoặc cơ sở dữ liệu. Lưu ý rằng bộ nhớ cache có thể hết hạn do nhiều yếu tố, và các chủ đề nền có thể bị giết bất kỳ ràng buộc nào nếu IIS tái sử dụng nhóm ứng dụng.

0

Bạn sẽ phải sử dụng javascript/jquery để thăm dò ý kiến ​​của máy chủ để thay đổi. Đây là một trong những tác dụng phụ không may mắn của tất cả các công cụ jquery/ajax lạ mắt: mọi người quên rằng trình duyệt phải thăm dò ý kiến ​​của máy chủ web - đó là kết nối một chiều, ngay cả khi đôi khi cảm thấy giống như ứng dụng khách winforms . Cuối cùng, trình duyệt phải thực hiện một yêu cầu đăng/nhận http theo cách riêng của nó. Có, bạn có thể phát ra javascript của khách hàng trước thời hạn để yêu cầu nó làm như vậy, nhưng điều này đòi hỏi bạn phải biết chính xác khi nào để gọi lại. Có vẻ như bạn có một số mã tùy ý sẽ được thực hiện khi nó được thực hiện, vì vậy trong trường hợp này bạn phải liên tục thăm dò ý kiến.

-Oisin

1

Điều này sẽ không làm những gì bạn nghĩ.

Sẽ có ý nghĩa hơn khi sử dụng bộ hẹn giờ js ở giao diện người dùng để gọi một webmethod cập nhật trang.

Hãy nhớ rằng với máy chủ, khi trang được hiển thị cho bạn, nó sẽ không còn tồn tại nữa cho đến khi được gọi lại. Web là phương tiện không quốc tịch. Postback và viewstate làm cho nó cảm thấy như nó không phải, nhưng nó thực sự là.

Như vậy, bạn sẽ không thể gọi cho khách hàng từ máy chủ, đó là những gì bạn đang cố gắng thực hiện.

Các vấn đề liên quan