1

私のアプリケーションは次のように動作します:

  • Excelファイルをアップロード+変換DataTable
  • 新しいスレッドを開始
  • ループスルーを開始DataTable
    • UI ( Label) を更新して、「[n] の行 [i] を処理中」と表示するようにします。
  • エンドループ

太字は私ができないことです。ワーカー スレッドから UI 要素を更新する方法についてオンラインで調べてみましたが、Web プロジェクトではなく、Windows フォームに関する結果がすべて見つかりました。これは可能ですか?

4

2 に答える 2

0

jQuery AJAX と asp.NETWebMethodおよびセッション変数を使用して回避策を見つけました。

ワーカー スレッドによって更新されたセッション変数をチェックすることで、以前の質問の 1 つのメソッドを使用しました。WebMethod

ワーカー スレッド:

Session["progress"] = "{\"current\":" + (i + 1) + ", \"total\":" + dt.Rows.Count + "}"

ウェブ方法:

[WebMethod]
public static string GetProgress()
    if (HttpContext.Current.Session["progress"] == null) {
        return "{\"current\":1,\"total\":1}";
    } else {
        return HttpContext.Current.Session["progress"];
    }
}

私のjQueryは基本的に、毎秒そのAJAX WebMethodを呼び出してループしました。ページの読み込み時に開始され、current = total「完了」と表示されてループがクリアされた場合、それ以外の場合は「[合計] の行 [現在] を処理中」と表示されます。jQuery UI プログレスバーも追加しました

これは一種の手動の解決策ですが、オーバーヘッドがほとんどなく、私の問題を解決します。予期しないが良い点は、Session 変数を使用しており、WebMethod がページの読み込みをチェックしているため、ワーカー スレッドがアクティブな場合、移動してページに戻ってもプログレスバーが表示されることです。

于 2012-12-07T14:13:48.790 に答える
0

はい、できます。実際には難しくありません。ajax ツールボックスを使用して簡単に実行できます。updatepanel を使用して進行状況を更新するだけです。

http://ajaxcontroltoolkit.codeplex.com/を確認してください

例: http://www.asp.net/ajax/documentation/live/overview/updateprogressoverview.aspx

于 2012-12-06T20:10:24.190 に答える