2016-10-15 6 views
0

ASP.NET 3.5 VB.NETパラメータを使用したASP.NETスレッド?

10種類のURLのそれぞれからPNGイメージを取得したいコードがあります。

私は、各PNGを取得するのに最大2〜3秒かかることがあるので、同時にすべてを取得することが最善であると考えました。

PNGフェッチごとにスレッドを作成するために、以下のコードを調整して助けてもらえますか?私は、1時間ほど前と後の試しで、何か助けを望んでいた多くのスレッドのものをやっていない。 TIA

Imports Microsoft.VisualBasic 
Imports System.Collections.Generic 
Imports System.Drawing 
Imports System.Drawing.Drawing2D 


Public Class TestImageSuggestionsCreate 

    Dim intClsWidthMaximumAllowed As Integer = 600 
    Dim intClsHeightMaximumAllowed As Integer = 400 
    Dim intClsWidthMinimumAllowed As Integer = 200 
    Dim intClsHeightMinimumAllowed As Integer = 200 

    Dim strClsImageOriginalURL As String = "" 
    Dim lstClsWebsitesImageURLs As New List(Of String) 


    Public Function fWebsitesImageSuggestionsCreate() As Boolean 

     'Load URLS strings into class List variable: lstClsWebsitesImageURLs 
     fWebsitesImageURLSuggestionsGet() 

     'Go through each URL and download image to disk 
     For Each strURL1 As String In lstClsWebsitesImageURLs 

      'This needs to be done in a separate thread 
      '(Up to 10 threads): 

      fAddImageIfSuitable(strURL1) 

     Next 

    End Function 

    Private Function fWebsitesImageURLSuggestionsGet() As Boolean 

     Dim strURL As String = "" 

     strURL = "https://upload.wikimedia.org/wikipedia/en/thumb/f/f7/Sheraton_Hotels.svg/1231px-Sheraton_Hotels.svg.png" 
     lstClsWebsitesImageURLs.Add(strURL) 

     strURL = "http://wall--art.com/wp-content/uploads/2014/10/sheraton-logo-png.png" 
     lstClsWebsitesImageURLs.Add(strURL) 

     'Up to 10 strURL items 
     '............. 

    End Function 

    Private Function fAddImageIfSuitable(ByVal strImageURL As String) As Boolean 

     'Get bitmap from URL 
     Dim btmImage1 As Bitmap = New Bitmap(fGetStreamBitmap(strImageURL)) 

     'Don't add if image too small 
     If btmImage1.Width < intClsWidthMinimumAllowed Or _ 
      btmImage1.Height < intClsHeightMinimumAllowed Then 
      Exit Function 
     End If 

     'Save image to disk here 
     '.............. 

    End Function 

    Private Function fGetStreamBitmap(ByVal strURL As String) As Bitmap 

     Try 
      Dim request As System.Net.WebRequest = System.Net.WebRequest.Create(strURL) 
      Dim response As System.Net.WebResponse = request.GetResponse() 
      Dim responseStream As System.IO.Stream = response.GetResponseStream() 
      Dim btmBitmap1 As New Bitmap(responseStream) 

      Return btmBitmap1 

     Finally 
     End Try 

    End Function 

End Class 

答えて

1

簡略化されたスレッド化にはParallel.ForEachを使用してください。

How to: Write a Simple Parallel.ForEach Loop

あなたはMaxDegreeOfParallelismとスレッドの数を制限することができます。

Parallel.ForEach(
    lstClsWebsitesImageURLs, 
    new ParallelOptions { MaxDegreeOfParallelism = 10 }, 
    strURL1 => { fAddImageIfSuitable(strURL1); } 
); 
+0

感謝を返送するための非同期メソッド(ディスクにイメージをダウンロードするためのURLを処理するのと同じ方法) 待機を呼び出して、各タスクのタスクのアレイプロジェクトはASP.NET 3.5にあります。 – user1946932

+0

@ user1946932 - これは初めに知っておいて良かったでしょう。 – Enigmativity

1

作成10タスク、すべてのスレッドが悲しいかな

var tasks = new List<Task>(); 
foreach(task in tasks){ 
task[0] = GetImageAsync();} 

Task.WaitAll(tasks.ToArray()); 
+0

ありがとうございますが、このプロジェクトはASP.NET 3.5にあります。 – user1946932

+0

@ user1946932 - それは初めに知っておいて良かったでしょう。 – Enigmativity

+0

@Enigmativity - はい、申し訳ありません。 – user1946932

関連する問題