변경 사항을 폴링하려면 타이머를 사용해야합니다. 다음과 같이 사용할 수 있습니다.
protected void Timer1_Tick(object sender, EventArgs e)
{
string s = (string)Session["Text"];
Session["Text"] = String.Empty;
bool hasNewText = !String.IsNullOrEmpty(s);
if (hasNewText)
{
txtOut.Text += s;
UpdatePanel1.Update();
}
}
백그라운드 프로세스는 데이터를받을 때 세션 [ "텍스트"]에 텍스트를 추가합니다. 타이머를 사용하지 않도록 설정하고 백그라운드 프로세스를 시작할 때 사용하도록 설정합니다. 그것은 다시 매번 타이머 게시물을 업데이트 할 수 없습니다 당신의 updatepanel을 알려주기 때문에,
<asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional" ChildrenAsTriggers="False">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnOK" />
</Triggers>
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick" />
<asp:TextBox ID="txtOut" ReadOnly="true" runat="server" Width="600px" Height="299px" Font-Names="Courier New"
TextMode="MultiLine"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
ChildrenAsTriggers="False"
이 중요하지만, 당신이 UpdatePanel1.Update를 호출하는 경우에만() :
귀하의 UpdatePanel은 다음과 같이 보일 수 있습니다.
배경에서 뭔가를하고 UpdatePanel (누군가의 브라우저에있는 페이지에 앉아 있음)에 메시지를 보내서 새로 고침을 시도하고 있습니까? 왜냐하면 그것은 명시 적으로 그렇게 작동하지 않을 것이기 때문입니다. UpdatePanel은 브라우저로부터의 요청과 브라우저에 대한 응답을 업데이트 (또는하지 않음)합니다. 나는 당신이하고 싶은 것이 업데이트를 위해 폴링하고 Timer를 UpdatePanel에서 AsyncPostbackTrigger로 설정하도록 Timer를 설정하는 것으로 의심된다. –
예는 백그라운드에서 tcpclient를 실행합니다. 클라이언트가 meassage를 얻을 때 나는 그것을 시간을 새롭게하고 싶다. 따라서 새 메시지가있을 때만 업데이트되고 매 초마다 업데이트되지 않습니다. –
웹 페이지가 실제로 작동하는 방식이 아닙니다. 백엔드에서 클라이언트의 웹 브라우저로 데이터를 푸시 할 수 없습니다. 웹 브라우저가 요청을 보내야합니다. –