lunedì 25 marzo 2013

Aree Condivise e Lock ( parte 2)

Diciamo pure che la sto mettendo sul lato personale...

    class Program
    {
        static void Main(string[] args)
        {
            ConsoleColor[] cx = new ConsoleColor[3];
            Thread[] tx = new Thread[3];

            cx[0] = ConsoleColor.Red;
            cx[1] = ConsoleColor.Yellow;
            cx[2] = ConsoleColor.Green;

            for (int i = 0; i < 3; i++)
            {
                LongWayToVictory tM = new LongWayToVictory(cx[i],
                        "T" + i.ToString().PadLeft(3, '0') + "  ");
                Thread t = new Thread(tM.DoMethod);

                Thread.Sleep(50);
                t.Start();
                tx[i] = t;
            }

            for (int i = 0; i < 3; i++)
            {
                tx[i].Join();
            }

            Console.WriteLine("--------------------------------------------");
            Console.ReadKey();

        }
    }


Mi sono rivisto il codice, e ho cercato di ovviare a eventuli problemi tuttavia l'unica cosa che forse non andava del tutto bene era proprio il look ..

Comunque ho provato ad aggiungere una thread.sleep prima di "startare" il thread che ora assume l'aspetto:

    public class LongWayToVictory
    {
        private ConsoleColor _cc;
        private string _msg = "";

        public LongWayToVictory(ConsoleColor cc, string msg)
        {
            _cc = cc;
            _msg = msg;
        }

        public void DoMethod()
        {
            Write(_msg + " Start " + _cc.ToString());
            Thread.Sleep(3000);
            for (int i = 0; i < 25; i++)
            {
                Write(_msg + " In loop i[" + i.ToString() + "]" +
                            _cc.ToString());
            }

            Write(_msg + " End " + _cc.ToString());
        }

        private void Write(string WhatIWrite)
        {
            object t = new object();
            lock (t)
            {
                Console.ForegroundColor = _cc;
                Console.WriteLine(WhatIWrite);
            }
        }
    }


Sicuramente migliore del precedente... il risultato in questo caso è ottimo ottengo i miei bei colori, ma rimane il dubbio che pur avendo messo una lock e pur avendo specificato il colore con cui deve lavorare la console, ottengo una irrimediabile tolleranza d'errore.

Per altro osservando il codice il comportamento non è del tutto sismile al mio "annoso" caso.

Continuo a lavorarci...

Nessun commento: