2

さまざまなサーバーからデータを取得して、システムの現在の状態を表示するページに取り組んでいます。

私のページには、5 つの異なるラベルとボタンがあります。ボタンをクリックすると、5 つの異なるスレッドがサーバーからデータを取得し、対応するラベル値を更新します。次のコードでテストアプリケーションを作成しました

protected void Page_Load(object sender, EventArgs e)
    {
        Thread t = new Thread(updateLbl);
        t.Start();
    }   


    protected void btnUpdateStatus_Click(object sender, EventArgs e)
    {
        Thread[] arrThread = new Thread[5];
        for (int i = 0; i < arrThread.Length; i++)
        {

            arrThread[i] = new Thread(new ParameterizedThreadStart(Update));
            arrThread[i].Name = "Thread" + (i + 1).ToString();

            arrThread[i].Start(
                new Parameters()
                    {
                        id = i + 1,
                        label = this.Master.FindControl("MainContent").FindControl ("Label" + (i + 1).ToString()) as Label
                    } as object);
        }
    }
    public void Update(object o)
    {
        Parameters p = o as Parameters;
        if (p != null && p.label != null)
        {
            p.label.Text = GetSystemState(p.id);
        }
    }
    class Parameters
    {
        public int id { get; set; }
        public Label label { get; set; }
    }

ラベルの値は更新されますが、ページはサーバーからすべての値が取得されるまでロードされ続け、ページに一度に表示されます。

スレッドがデータを取得した場合、対応するラベルを更新して、他のプロセスがデータを取得したかどうかに関係なく顧客が利用できるようにする必要があり、データが取得されるとすぐに更新される必要があります。

4

1 に答える 1

0

根本的な問題は、ASP.Netページのライフサイクルを理解することです

基本的に、ページでマルチスレッドを使用していますが、ページの処理が完了するまで、サーバーはユーザーに応答を送信します。

目的の出力を取得するには、次のアプローチに従います。

https://stackoverflow.com/a/11525692/1268570

詳細情報:

于 2012-07-28T20:51:58.760 に答える