2016-04-27 10 views
0

私は、APIを使用してデータを取得する必要があるため、完了までにかなりの時間がかかるループを実行するメソッドがあります。 私がしたいことは、各ループ中にシステムがどのように進行しているかを説明するメッセージをフロントエンドに表示することです。処理中にフロントエンドを更新する方法はありますか?ポストバック中にフロントエンドを更新する

 public static void GetScreenshot(List<string> urlList, List<DesiredCapabilities> capabilities, String platform, Literal updateNote) 
     { 
     foreach (String url in urlList) 
     { 
      String siteName = new Uri(url).Host; 

      String dir = AppDomain.CurrentDomain.BaseDirectory+ "/Screenshots/" + siteName + "/" + DateTime.Now.ToString("yyyy-MM-dd_HH-mm"); 
      foreach (DesiredCapabilities cap in capabilities) 
      { 
      String saveDirectory = ""; 
      if (platform == "btnGenDesktopScreens") 
      { 
       saveDirectory = dir + "/" + cap.GetCapability("os") + "-" + cap.GetCapability("os_version") + "-" + cap.GetCapability("browser") + cap.GetCapability("browser_version"); 
      } 
      else if(platform == "btnMobile") 
      { 
       saveDirectory = dir + "/" + cap.GetCapability("platform") + "" + cap.GetCapability("device") + "-" + cap.GetCapability("browserName"); 
      } 
      updateNote.Text += "<br/>" + cap.GetCapability("platform") + " - " + cap.GetCapability("device") + "-" + cap.GetCapability("browserName"); 
//I'd like to display a message here 
      TakeScreenshot(url, cap, saveDirectory); 
//I'd like to display a message here 
      } 
     } 
     } 

これを行う方法は誰ですか。

答えて

0

フィードバックをどのようにユーザーに返すかによって、HttpResponse.Flushをループで使用してHTMLレスポンスの一部を一度に少しずつプッシュすることができます。 https://msdn.microsoft.com/en-us/library/system.web.httpresponse.flush(v=vs.100).aspx

+0

ハイ@ADysonを参照してください、応答のためにありがとう。私は、リテラルのテキストを更新した後でそれを追加することを真実にしてきましたが、役に立たなかったのです。 – Spitfire2k6

+0

リンクの例のように、出力バッファリングもオンになっていることを確認しましたか? – ADyson

+0

また、すべての出力を1つのリテラルに入れようとしている場合にはうまくいくとは思えません。 Response.Writeを使用し、Flushメソッドを呼び出すたびに、各ループの新しいリテラルを作成し、出力に書き込むほうがよいでしょう。また、リテラルを仲介者として使用せずに、HTMLを直接レスポンスに直接書き込むこともできます。 – ADyson

関連する問題