0

私の C# ASP.NET プロジェクトには、何らかの処理を行うバックグラウンド スレッドがあります。バックグラウンドプロセスの開始時と終了時にユーザーに表示したい。そのために、私が持っているバックグラウンド コードで:

public static void RefreshNavigationElements()
{
    TimeInfoEventArgs timeInformation = new TimeInfoEventArgs("WPALoading has started");
    WorkProductAgreements.OnSecondChange(timeInformation);
    WPA_Supers.Clear();
    PopulateWPAs();
    timeInformation.myMessage = "WPALoading has ended";

    WorkProductAgreements.OnSecondChange(timeInformation);
}

イベントをリッスンしているコード:

public void TimeHasChanged(TimeInfoEventArgs ti)
{
    Label11.Text = ti.myMessage;
    System.Diagnostics.Debug.WriteLine(ti.myMessage);
}

デバッガーでステップ実行すると、TimeHasChanged関数が適切なタイミングで呼び出され、 内の正しいテキストが表示されることがわかりますtiDebug.WriteLineコマンドは正しいメッセージを出力します。ただし、Label11テキストはページ上で変更されません。

私の物事に対する理解はあまり深くありませんが、ページの更新などをトリガーする必要があるだけだと思いますが、私の人生では、それを行う方法を理解することはできません.

の中に入れてみましLabelUpdatePanelTimeHasChanged呼び出されるたびに新しいラベルを作成しようとしました。しかし、私の試みはどれも違いを生むようには見えません。どんな助けでも大歓迎です。

4

1 に答える 1

0

ASP.NET では、ブラウザーがページを要求すると、サーバーがスレッドを開始してページをレンダリングし、それをブラウザーに送り返します。ページがレンダリングされると、スレッドが終了し、関連するすべてのバックグラウンド ワーカーも終了します。この時点で、ページはそのままブラウザに返されます。そのため、バックグラウンド ワーカーが終了するまで明示的に待機しない限り、終了してページ コンテンツを更新することはありません。

ここでいくつかのテクニックを使用できます。

ただし、スレッドが終了するまでページがブラウザーに送信されないため、バックグラウンド ワーカーの実行に非常に長い時間がかかる場合、ブラウザーでタイムアウトが発生したり、ページが応答しなくなったりする可能性があります。

これを回避するには、AJAX と Web サービスを使用します。バックグラウンド ワーカーの機能を Web サービス メソッドで公開し、AJAX を使用してこのメ​​ソッドを実行します。このメソッドが終了したら、ブラウザで直接ラベルを更新できます。これが発生している間、ブラウザはまだ応答しています。

このために、こちらで説明されているように、jQuery および ASP.NET Web サービスを使用できます。

最後に、ASP.NET で非常に長いプロセスを実行しないでください。サーバーは時々アプリケーションをリサイクル (再起動) するため、Web サービス メソッドの実行が突然停止する可能性があります。

于 2012-05-25T00:12:47.547 に答える