0

重複の可能性:
マルチスレッドを使用した asp.net 更新 UI

バックグラウンドで処理するスレッドを開始しました。処理が完了したら、ページのラベルを変更したいと思います。

でも私の価値観は変わりません。

私のサンプル:

    protected void Page_Load(object sender, EventArgs e)
    {
         new Thread(() => ActionStart()) { IsBackground = true }.Start();
    }
    bool _shouldStop = false;

    public void ActionStart()
    {
        while (!_shouldStop)
        {
            // ....

            requestStop();
        }

        //thread finished
        ChangeValue();

    }
    private void ChangeValue()
    {
        lab.Text = "Changed";
    }

    private void requestStop()
    {
      _shouldStop = true;
    }
4

1 に答える 1

1

ページのライフサイクルを考えると、スレッドが遅くなる前にスレッドが完了することを確認できないため、スレッドでこのコードを実行しても役に立たないのではないかと思います。一般に、コントロールの値を変更できる最後の機会はそのPreRenderイベントですが、それは開発方法によって異なります。

ただし、並列処理を行う必要がある場合でもParallel.Foreach、たとえばページ イベント内で を使用して、PageLoad非同期にせずに並列処理を利用することができます (Parallel.Foreachすべてのスレッドが完了したときにのみ返されます)。

于 2012-07-06T15:06:15.483 に答える