0

我正在尝试在单独的线程中向 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 秒后我没有看到任何行添加到表中。这是不可能的还是我错过了什么?

4

2 回答 2

0

如果您希望在渲染五秒钟后看到新行出现在客户端,则此代码不会发生这种情况。服务器上的后台线程不会导致客户端更改其外观。

如果您希望这种情况发生,您需要使用 Javascript(如果您不需要任何服务器数据)或 Ajax 调用(如果您需要)从客户端启动事件。这本身就在后台发生,因此您无需在服务器上运行单独的线程。

于 2013-03-28T16:44:48.407 回答
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);
}
于 2013-03-28T16:59:43.883 回答