그러냐

델리게이트(delegate) 활용_2 본문

c#

델리게이트(delegate) 활용_2

관절분리 2016. 1. 28. 11:23
반응형

using System;
using System.Collections;

namespace FirstCon
{
    class Archive
    {
        public static void Compress(int nFile)
        {
            for( int i = 0; i < nFile; i++ )
            {
                Console.WriteLine("{0}번째 파일을 압축하는 중이다...", i + 1);
                System.Threading.Thread.Sleep(500);
            }
        }
    }
    class Program
    { 
        static void Main()
        {
            Archive.Compress(10);
            Console.WriteLine("모든 파일을 압축했습니다.");
        }
    }
   
}

/* 델리게이트 활용 */

 

using System;
using System.Collections;

namespace FirstCon
{
    class Archive
    {
        public delegate void CompProg(int nFile);
        public static void Compress(int nFile, CompProg Prog)
        {
            for( int i = 0; i < nFile; i++ )
            {
                Prog(i);
                System.Threading.Thread.Sleep(500);
            }
        }
    }
    class Program
    { 
        public static void Progress(int nFile)
        {
            Console.WriteLine("{0} 번째 파일을 압축하는 중입니다.", nFile + 1);
        }
        public static void EngProgress(int nFile)
        {
            Console.WriteLine("Now Compressing {0} File. Wait Please", nFile + 1);
        }
        static void Main()
        {
            Archive.Compress(10, EngProgress);
            Console.WriteLine("모든 파일을 압축했습니다.");
        }
    }
   
}

 

/*

    델리게이트 활용 

    사용자가 중간에 취소 할 수 있게

*/

 

using System;
using System.Collections;

namespace FirstCon
{
    class Archive
    {
        public delegate bool CompProg(int nFile);
        public static bool Compress(int nFile, CompProg Prog)
        {
            for( int i = 0; i < nFile; i++ )
            {
                if( Prog(i) == false )
                    return false;

                System.Threading.Thread.Sleep(500);
            }
            return true;
        }
    }
    class Program
    { 
        public static bool Progress(int nFile)
        {
            Console.WriteLine("{0} 번째 파일을 압축하는 중입니다.(취소시 Esc).", nFile + 1);
            if( Console.KeyAvailable )
            {
                ConsoleKeyInfo cki;
                cki = Console.ReadKey(false);
                if( cki.Key == ConsoleKey.Escape )
                    return false;
            }
            return true;
        }
        static void Main()
        {
            if( Archive.Compress(10, Progress) == true )
            {
                Console.WriteLine("모든 파일을 압축했습니다.");
            }
            else
            {
                Console.WriteLine("취소 되었습니다.");
            }
        }
    }
   
}

반응형