quinta-feira, 4 de março de 2010

Forma correta de chamar Threads

Sempre que formos trabalhar com Threads, devemos nos atentar a algumas regras, para facilitar o design do nosso projeto, simplificando nosso código e encapsulando parâmetros e atributos que não necessitam ficar expostos.

Abaixo segue um exemplo de como trabalhar com Thread deste modo.


using System;
using System.Threading;


namespace MeuNameSpace
{
    public class MinhaThread
    {
        #region Constructor
        public MinhaThread(int maxLoops, string description)
        {
           this.MaxLoops = maxLoops;
           this.Description = description;
        } 
        #endregion

        #region Attributes
        private Thread threadExec;
        #endregion
        
        #region Properties
        public int MaxLoops { get; private set; }

        public string Description { get; private set; }

        public ThreadState State
        {
            get
            {
                return this.threadExec.State;
            }
        }
        #endregion
        
        #region Methods
        public void Start()
        {
            this.ThreadExec = new Thread(Run);
            this.ThreadExec.Start();
        }

        private void Run()
        {
            for (int i = 0; i < this.MaxLoops; i++)
            {
              Console.WriteLine(this.Description);
            }
        } 
        #endregion

    }


    [STAThread()]
    public class Program
    {
        public static void Main()
        {
            MinhaThread minhaThread = new MinhaThread(30, "Tem que escrever isto");
            minhaThread.Start();

            while (minhaThread.State == ThreadState.Running)
            {
                Console.WriteLine("Thread Ainda não terminou, então vamos esperar mais um pouquinho");
                Thread.Sleep(5);
            }

            Console.WriteLine("Agora a Thread terminou, você viu que executamos ela e não tivemos nem acesso ao método e nem a ela.");
            Console.WriteLine("Apenas instanciamos a classe dela, passamos os parâmetros necessários e mandamos executar, sem saber como isto é feito");
        }
    }
}



E isto é tudo pessoal

Nenhum comentário: