我有一个defualt.aspx,其中包含一个updatepanel。然后我有一个类myTCPClient.cs,其中我有一个tcpclient。当它收到消息时,它会产生一些魔力,然后它应该通过执行updatepanel1.Update()来更新updatepanel。但是我如何访问updatepanel?
我唯一的解决方法是将updatepanel传递给班级。但是这样做的方法是什么?必须有更好的方法吗?
答案 0 :(得分:0)
您需要使用Timer来轮询更改。你可以使用这样的东西:
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();
}
}
您的后台进程会在接收数据时将文本附加到Session [“Text”]中。您将禁用计时器以启动它,并在您启动后台进程时启用它。
您的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()时才会更新。