Лабораторная работа 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;

        }

    }

}