1

私は困っています。私の Web アプリには、ボタンの Click イベントでスレッドを作成してデータ集約型のタスクを実行するコードがあります。これは次のようなものです。

protected void button_Click(object sender, EventArgs e)
{
    // Show loader image
    loader.Show();

    // Creating the thread
    System.Threading.ParameterizedThreadStart ts = new System.Threading.ParameterizedThreadStart(RunThread);
    Thread t = new Thread(ts);
    t.Name = "BackgroundThread";
    t.Priority = ThreadPriority.AboveNormal;
    t.Start(HttpContext.Current);
}
private void RunThread(object state)
{
    // Setting the current thread property as the background thread
    CurrentThread = Thread.CurrentThread;

    if (IsThreadRunning(CurrentThread))
    {
        CurrentThread.Join(TimeSpan.FromMinutes(6d));
    }

    // DO SOME HEAVY STUFF
}

ボタンをクリックすると、ローダーが表示されます。問題は、 JoinBackgroundThreadで呼び出しても、 Page_Load イベントが頻繁に呼び出されてページが更新されることです。つまり、RunThreadが終了しない間、Page_Load が呼び出されます。これを防ぐことはできますか?

OBS: 私がやりたいことは: データ集約型スレッドが実行されている間、ページを繰り返し更新せずにローダーを表示することです。

4

1 に答える 1

1

ポーリングせずに(時々ポストバックを作成して)Webページから長時間実行されているタスクのステータスを確認する唯一の方法はWeb Socketsを使用することですが、これを使用すると、この種のタスクのオーバーヘッドが大きくなると確信しています。

ページ全体のリロードを防ぐためにajaxリクエストを使用します。

Webの要求と応答のプロセス全体についてもっと読む必要があるようです。

于 2012-10-26T21:10:05.710 に答える