我正在尝试在单独的线程中向ASP表控件添加行。基本上这就是我到目前为止所做的:
代码隐藏:
protected void onLoad(object sender, EventArgs e)
{
Thread obj = new Thread(new ThreadStart(testX));
obj.IsBackground = true;
obj.Start();
}
void testX()
{
System.Threading.Thread.Sleep(5000);
Table tblOnline = (Table)FindControl("test");
TableRow r = new TableRow();
TableCell c1 = new TableCell();
Label test = new Label();
test.ForeColor = System.Drawing.Color.Black;
test.Font.Bold = true;
test.Text = "Rank";
c1.Controls.Add(test);
r.Cells.Add(c1);
tblOnline.Rows.Add(r);
}
我的ASPX:
<body>
<asp:Table runat="server" id="test"></asp:Table>
</body>
当我编译网站时,5秒后我看不到任何行添加到表中。这是不可能的还是我错过了什么?
答案 0 :(得分:0)
如果您希望在渲染后五秒钟看到新行出现在客户端,则此代码不会发生这种情况。服务器上的后台线程 不会导致客户端更改其外观。
如果您希望这样做,您需要使用Javascript(如果您不需要任何服务器数据)或Ajax调用(如果您这样做)从客户端启动事件。这本身就是在后台进行的,因此您无需在服务器上运行单独的线程。
答案 1 :(得分:0)
在ASP.NET中使用线程不会像您尝试的那样工作。
如果您想要的是每5秒向表中添加一行,我建议您使用Timer控件:
<asp:Table runat="server" ID="tableTest">
</asp:Table>
<asp:Timer ID="timerAddRow" runat="server" OnTick="timerAddRow_Tick" Interval="5000">
</asp:Timer>
代码隐藏:
protected void timerAddRow_Tick(object sender, EventArgs e)
{
TableRow r = new TableRow();
TableCell c1 = new TableCell();
Label test = new Label();
test.ForeColor = System.Drawing.Color.Black;
test.Font.Bold = true;
test.Text = "Rank";
c1.Controls.Add(test);
r.Cells.Add(c1);
tableTest.Rows.Add(r);
}