8) MakeProjectEventArgs, MakeProjectEventHandler

평가 프로젝트를 생성 요청하면 평가 대상 프로세스의 메인 창의 자동화 요소를 검색을 진행합니다. 그런데 검색할 자동화 요소가 많으면 많은 시간을 소요하여 동기식으로 진행하면 평가자는 프로그램이 멈춰있는 것으로 착각할 수 있습니다. 이러한 이유로 이 작업을 비동기식으로 진행할 것입니다.

평가 프로젝트를 생성 요청한 곳에서는 이러한 작업이 끝난 것을 알 수 있어야 하는데 이를 위해 이벤트처리를 할 것입니다. 이를 위해 이벤트 인자와 대리자 형식을 정의합시다.

public class MakeProjectEventArgs:EventArgs
{

평가 프로젝트 개체인 AccEvalProject를 가져오기 할 수 있는 속성을 제공합니다.

    public AccEvalProject AccEvalProject{    get;    private set;    }

평가 프로젝트 제목을 쉽게 가져오기 할 수 있는 속성을 제공합니다.

    public string Title
    {
        get
        {
            if (AccEvalProject == null)
            {
                return string.Empty;
            }
            return AccEvalProject.Title;
        }
    }

평가 프로젝트의 검색 과정에서 정보 DataTable을 가져오기 할 수 있는 속성을 제공합니다.

    public DataTable Table
    {
        get
        {
                if (AccEvalProject == null){    return null;    }
                return AccEvalProject.Table;
            }
        }
    }

평가 대상 프로세스를 래핑한 EHProcess 개체를 가져오기 할 수 있는 속성을 제공합니다.

    public EHProcess EHProcess
    {
        get
        {
            if (AccEvalProject == null){    return null;    }
            return AccEvalProject.EHProcess;
        }
    }

생성자에서는 AccEvalProject 개체를 인자로 받아 속성을 설정합니다.

    internal MakeProjectEventArgs(AccEvalProject aeproject)
    {
        AccEvalProject = aeproject;
    }

ToString 메서드를 재정의하여 평가 프로젝트 제목을 반환합시다.

    public override string ToString()
    {
        return Title;
    }
}

대리자 형식도 정의합니다.

public delegate void MakeProjectEventHandler(object sender,MakeProjectEventArgs e);
using System;
using System.Data;

namespace 접근성_평가_도우미
{
    public class MakeProjectEventArgs:EventArgs
    {
        public AccEvalProject AccEvalProject
        {
            get;
            private set;
        }
        public string Title
        {
            get
            {
                if (AccEvalProject == null)
                {
                    return string.Empty;
                }
                return AccEvalProject.Title;
            }
        }        
        public DataTable Table
        {
            get
            {
                if (AccEvalProject == null)
                {
                    return null;
                }
                return AccEvalProject.Table;
            }
        }
        public EHProcess EHProcess
        {
            get
            {
                if (AccEvalProject == null)
                {
                    return null;
                }
                return AccEvalProject.EHProcess;
            }
        }
        internal MakeProjectEventArgs(AccEvalProject aeproject)
        {
            AccEvalProject = aeproject;
        }
        public override string ToString()
        {
            return Title;
        }
    }
    public delegate void MakeProjectEventHandler(object sender,MakeProjectEventArgs e);
}

[소스 10.8] MakeProjectEventArgs.cs