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>

Web サイトをコンパイルすると、5 秒後にテーブルに行が追加されません。これは不可能ですか、それとも何か不足していますか?

4

2 に答える 2

0

レンダリングの 5 秒後に新しい行がクライアント側に表示されることを期待している場合、このコードではそうはなりません。サーバー上のバックグラウンド スレッドによってクライアントの外観が変わることはありません。

これを実現したい場合は、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 に答える