Добрый день.
Есть C# WinForms .NET 4 - 4.5 приложение. Есть следующий код:
public class SuperClass: ClassName
{}
public abstract class ClassName
{
public static IEnumerable<ClassName> GetAll(string param)
{
var queue = new Queue<string>();
var cacheableData = new HashSet<string>();
queue.Enqueue(param);
while (queue.Count > 0)
{
HttpWebRequest request = new HttpWebRequest.Create(param);
// ... логика обработки http запроса
yield return new SubClass {}
// ... еще логика разная
// paramNext = ...
cacheableData.Add(paramNext);
queue.Enqueue(paramNext);
}
}
public class SubClass : ClassName
{ }
}
// .. выполнение кода на форме
var classResult = ClassName.GetAll("xxx");
foreach (ClassName result in classResult )
{
/// что-то делаю с result , заполняю инфу в ListBox
}
Его суть - получить некое значение, обработать его, добавить новые параметры в очередь, и так пока не получу все данные (пусть это будет какой-нить web spider, который парсит линки на страничке и добавляет их в очередь, или какие-нить email-ы).
При выполнении такого кода приложение, естественно, зависает (замораживается). Не спасает даже:
Application.DoEvents();
Думал о том, чтобы вынести выполнение в кода в поток (Thread, Task, может быть, еще что-то, я еще в этом теме не очень). Но не знаю, как это сделать (и можно ли с yield, или надо будет писать какие-то события, делегаты, может быть что-то еще). Помогите разобраться с такой задачей, пож-ста.
Спасибо!