Лабораторная работа 2 - Применение модели грид-потоков для внедрения в грид существующего приложения
Класс LocalApplication для запуска грид-потоков на локальной машине
/// <summary>
/// Обеспечивает запуск грид-потоков на локальной машине.
/// </summary>
public class LocalApplication
{
/// <summary>Обработчик успешно завершившихся грид-потоков.</summary>
public event GThreadFinish ThreadFinish;
/// <summary>Обработчик неудачно завершившихся грид-потоков.</summary>
public event GThreadFailed ThreadFailed;
/// <summary>Коллекция грид-потоков для запуска на локальной машине.</summary>
private ThreadCollection threadCollection;
/// <summary>Идентификатор обрабатываемого грид-потока.</summary>
private int threadID;
/// <summary>
/// Создает новое локальное приложение.
/// </summary>
public LocalApplication()
{
// Создаем новую коллекцию грид-потоков
threadCollection = new ThreadCollection();
}
/// <summary>
/// Последовательно выполняет грид-потоки на локальной машине.
/// </summary>
private void ExecuteThreads()
{
foreach (GThread thread in threadCollection)
{
// Устанавливаем идентификатор грид-потока
thread.SetId(threadID++);
try
{
// Запускаем грид-поток на выполнение
thread.Start();
}
catch (Exception e)
{
// Запускаем обработчик неудачно завершившихся грид-потоков
if (ThreadFailed != null)
{
ThreadFailed(thread, e);
}
}
// Запускаем обработчик успешно завершившихся грид-потоков
if (ThreadFinish != null)
{
ThreadFinish(thread);
}
}
// Удаляем обработанные грид-потоки из коллекции
threadCollection.Clear();
}
/// <summary>
/// Запускает локальное приложение в отдельном потоке.
/// </summary>
public void Start()
{
// Создаем отдельный поток для выполнения локального приложения
Thread thread = new Thread(new ThreadStart(ExecuteThreads));
// Запускаем созданный поток
thread.Start();
}
/// <summary>Коллекция грид-потоков для запуска на локальной машине.</summary>
public ThreadCollection Threads
{
get
{
return threadCollection;
}
set
{
threadCollection = value;
}
}
}