서로 다른 Class 에서 Action 콜백 호출하기

개요

  • C# 에서 UI 개발을 진행하다 보면, 이벤트를 매우 많이 사용하는 경우가 있습니다.
  • 또한, 서로 다른 폼 혹은 서로 다른 클래스끼리 상태가 변경 되었을 경우, 다른 컴포넌트 혹은 클래스로 상태의 정보를 전달해야 하는 경우가 있습니다.
  • 이를 구현하기 위한 방법은 여러가지가 있겠지만, 그 중에서도 저는 Action 콜백을 이용하여 서로 다른 Class 에서 Action 콜백을 호출하는 방법에 대해서 알려 드리려고 합니다.

ActionStart.cs

  • 먼저, ActionStart.cs 클래스를 생성하였습니다.
  • 여기서 Action<bool> 타입의 Action 속성을 하나 생성하였습니다.
  • 그리고, Start 함수 안에서 action 콜백 return 값으로 true 값을 전달하는 것을 볼 수 있습니다.
  • 이제 해당 콜백을 받은 이벤트 핸들러가 정의되어 있는 Program.cs 코드를 보도록 하겠습니다.
namespace ConsoleApp1
{
    public class ActionStart
    {
        public Action<bool> action { get; set; }

        public ActionStart(Action<bool> action)
        {
            this.action = action;
        }

        public void Start()
        {
            this.action.Invoke(true);
        }
    }
}

Program.cs

  • 앞서, Action<bool> action 을 Invoke 해주는 ActionStart.cs 클래스를 생성하고 구현하였습니다.
  • 다음은 실제로 해당 콜백이 일어날 경우, 이벤트가 실행되는 코드는 이벤트 핸들러를 구현합니다.
  • 다음 코드에서의 이벤트 핸들러는 TestEventHandler 메서드 입니다.
  • actionStart.Start() 로 Start 함수가 실행 되면, ActionStart.cs 에서 정의되어 있는 Start 메서드가 호출되어 action.Invoke(true) 콜백 값이 리턴되어 최종적으로 TestEventHandler(bool result) 이벤트 핸들러의 argument 인 result 값에 true 가 바인딩 되는 것을 확인할 수 있습니다.
  • 이렇듯, 서로 다른 Class 에서 Action 함수를 이용하여 상태 값 혹은 데이터 값을 주고 받을 수 있습니다.
using ConsoleApp1;

Action<bool> action = TestEventHandler;
ActionStart actionStart = new(action);

actionStart.Start();

void TestEventHandler(bool result)
{
    Console.WriteLine($"result : {result}");
}
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY