2017-01-30 6 views
-2

ウェブページのコンテンツを読み込んでファイルに保存できました。この質問は、コードを何度も何度も何度も何度もやり直さなくても、どのようにして10の異なるWebページを読むのですか?助けることができるループメカニズムはありますか?ここでは、私がやっていることである:C#で10種類のウェブサイトのコンテンツを読んで10種類のテキストファイルに保存したい

static void Main(string[] args) 
{ 
    Task Task1 = new Task(() => ReadWriteWeb("http://www.hawaii.edu")); 
    Task1.Start(); 
    Console.ReadLine(); 
} 
static void ReadWriteWeb(string Url) 
{ 
    try 
    { 
     using (WebClient WebC = new WebClient()) 
     { 
      string WebContents = WebC.DownloadString(Url); 
      Console.WriteLine(WebContents); 
       using (StreamWriter SW = new StreamWriter("myFile") 
        SW.WriteLine(WebContents + ". " + "The lenght of file is {0}", WebContents.Length); 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("The web content cannot be reached"); 
     Console.WriteLine(e.Message); 
    } 
} 
+2

Googleなどの検索エンジンに 'C#loop'と入力しましたか? – Adrian

+0

あなたはなぜ-3票をすでに受け取ったのかわかりません。あなたの質問に間違いがないとは思えますが、たとえそれがまだ簡単なことがあるとしても、それはまだ有効な質問です。 –

答えて

0

私を許してください、しかし、あなたがここにいることを願っているあなたがすでにループを認識していると仮定すると、私はあなたが探していると思った答えです。これは、linqの単純なループ/マルチスレッド機能を介して、すべてのファイルを同時にダウンロードします。

public class Program 
{ 
    volatile static int fileNameCounter = 1; 

    static void Main(string[] args) 
    { 
     var listOfTasks = new List<Task>() 
     { 
      new Task(() => ReadWriteWeb("http://www.hawaii.edu")), 
      new Task(() => ReadWriteWeb("http://www.hawaii.edu")), 
      new Task(() => ReadWriteWeb("http://www.hawaii.edu")), 
      new Task(() => ReadWriteWeb("http://www.hawaii.edu")) 
     }; 

     listOfTasks.AsParallel().ForAll(task => task.Start()); 

     Console.ReadLine(); 
    } 

    static async void ReadWriteWeb(string Url) 
    { 
     Console.WriteLine($"File {fileNameCounter} complete"); 

     try 
     { 
      using (WebClient WebC = new WebClient()) 
      { 
       string WebContents = await WebC.DownloadStringTaskAsync(Url); 
       Console.WriteLine(WebContents); 
       using (StreamWriter SW = new StreamWriter($"myFile{fileNameCounter++}")) 
        SW.WriteLine(WebContents + ". " + "The lenght of file is {0}", WebContents.Length); 

      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("The web content cannot be reached"); 
      Console.WriteLine(e.Message); 
     } 
    } 
} 

私は1つのウェブURLしか持っていなかったので、同じものを4回リストしました。あなたは考えを得る...

+0

Michael Puckettありがとうございました。私はそのアイデアを完全に理解している。それは期待どおりに働いた。今までは、私はlinqのマルチスレッド機能を知らない。啓発に感謝します。私がこの機能についてもっと読むことができるリンクに親切に私を指すことができれば、私は感謝以上のものになります。 – Awani

+0

Linqには柔軟性とオプションが豊富に用意されています。ここで私が提供することができる最高のリンク2-linq(馬鹿を意図した)があります。そこから必要なだけ掘りなさい。 https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b –

+0

このリンクにはAsParallelの例の説明がありません。私はそれを説明するために全力を尽くします。複数のオブジェクトのクエリがある場合、ParallelQuery オブジェクトを返す.AsParallel()を選択できます。 ParallelQueryオブジェクトは、基本的に、列挙のすべての作業を同時に実行します。拡張メソッドForAll()は、列挙内の各項目にアクションを渡すことができ、AsParellel上にあるので、同時にタスクにも発生します。 –

0

標準ループ構造がfor loopforeach loop含まれています。一般的に

、あなたははおそらくは、C#について知りたいことができ何がMSDNにreferenceで見つけることができます。