Visual C# 개발 환경과 함께 C#의 이벤트 구독 및 구독 해지 설명

3767 단어
클래스나 대상은 이벤트를 통해 다른 클래스나 대상에게 발생하는 관련 일을 통지할 수 있다.이벤트를 발송(또는 유발)하는 클래스를'발행자'라고 하고, 이벤트를 수신(또는 처리)하는 클래스를'구독자'라고 한다.일반적인 C# Windows 창 또는 웹 응용 프로그램에서 컨트롤(예: 버튼 및 목록 상자)에서 발생하는 이벤트에 가입할 수 있습니다.Visual C# 통합 개발 환경(IDE)을 사용하여 컨트롤이 게시하는 이벤트를 탐색하고 처리할 이벤트를 선택할 수 있습니다.IDE는 빈 이벤트 처리 방법과 구독 이벤트에 대한 코드를 자동으로 추가합니다.
이벤트 개요 이벤트의 특징은 다음과 같습니다.
4
  • 발행자가 언제 사건을 일으킬지 결정하고 구독자가 어떤 조작을 해서 사건을 울릴지 결정한다

  • 4
  • 한 사건에 여러 명의 구독자가 있을 수 있다.한 구독자가 여러 발행자로부터 온 여러 사건을 처리할 수 있다

  • 4
  • 구독자가 없는 사건은 영원히 일어나지 않을 것이다

  • 4
  • 이벤트는 일반적으로 사용자에게 조작을 알리는 데 사용된다. 예를 들어 도형 사용자 인터페이스의 단추 클릭이나 메뉴 선택 조작이다

  • 4
  • 만약에 한 사건에 여러 명의 구독자가 있다면 이 사건을 일으킬 때 여러 개의 이벤트 처리 프로그램을 동기화할 것이다

  • 에 있습니다.NET Framework 클래스 라이브러리에서 이벤트는 이벤트Handler 위임과 이벤트Args 기반 클래스를 기반으로 합니다.
    구독 및 구독 취소 이벤트 이벤트를 일으킬 때 호출되는 사용자 정의 코드를 작성하려면 다른 종류에서 발표된 이벤트를 구독할 수 있습니다.예를 들어, 사용자가 이 단추를 눌렀을 때 유용한 동작을 수행할 수 있도록 어떤 단추의 클릭 이벤트를 구독할 수 있다.Visual Studio IDE를 사용하여 이벤트에 가입할 때 속성 창이 보이지 않으면 [디자인] 뷰에서 이벤트 프로세서를 만들 창이나 컨트롤을 마우스 오른쪽 단추로 클릭하고 [속성]을 선택합니다.속성 창 맨 위에서 이벤트 아이콘 을 클릭합니다.생성할 이벤트(예: Load 이벤트)를 두 번 클릭합니다.Visual C# 은 빈 이벤트 처리 방법을 만들어 코드에 추가합니다.또는 [코드] 뷰에서 코드를 수동으로 추가할 수도 있습니다.예를 들어 다음 코드 줄은 Form 클래스에서 Load 이벤트를 일으킬 때 호출되는 이벤트 처리 방법을 설명합니다.
    
    private void Form1_Load(object sender, System.EventArgs e)
    {
      // Add your form load event handling code here.
    }
    

    프로젝트 Form1.Designer.cs 파일의 Initialize Component 메서드에서 이벤트를 구독하는 데 필요한 코드 줄을 자동으로 생성합니다.코드 행은 다음과 같습니다.
    
    this.Load += new System.EventHandler(this.Form1_Load);
    

    프로그래밍 방식으로 이벤트를 구독하여 이벤트 처리 프로그램 방법을 정의합니다. 그 서명은 이 이벤트의 위탁 서명과 일치합니다.예를 들어, 이벤트가 EventHandler 위임 유형을 기반으로 하는 경우 다음 코드는 메소드 스텁을 나타냅니다.
    
    void HandleCustomEvent(object sender, CustomEventArgs a)
    {
      // Do something useful here.
    }
    

    플러스 값 연산자(+=)를 사용하여 이벤트에 이벤트 처리 프로그램을 추가합니다.다음 예제에서는 publisher라는 객체에 RaiseCustom Event라는 이벤트가 있다고 가정합니다.구독자 클래스는 발행자 클래스를 인용해야 이벤트를 구독할 수 있음을 주의하십시오.
    
    publisher.RaiseCustomEvent += HandleCustomEvent;
    

    앞의 구문은 C# 2.0의 새 구문입니다.이 구문은 새 키워드를 사용하여 포장 위임을 명시적으로 작성해야 하는 C# 1.0 구문과 같습니다.
    
    publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);
    

    또한 lambda 표현식을 사용하여 이벤트 프로세서를 추가할 수도 있습니다.
    
    public Form1()
    {
      InitializeComponent();
      // Use a lambda expression to define an event handler.
      this.Click += (s,e) => { MessageBox.Show(
        ((MouseEventArgs)e).Location.ToString());};
    }
    

    자세한 내용은 LINQ 외부에서 Lambda 표현식(C# 프로그래밍 안내서)을 사용하는 방법을 참조하십시오.익명 방법으로 이벤트를 구독합니다. 나중에 이벤트를 구독을 취소할 필요가 없으면, 이 이벤트에 익명 방법을 추가할 수 있습니다.다음 예에서,publisher라는 대상이 RaiseCustom Event라는 이벤트를 가지고 있다고 가정하고,Custom Event Args 클래스를 정의하여 특정한 유형의 전용 이벤트 정보를 불러옵니다.구독자 클래스는publisher를 인용해야 이벤트를 구독할 수 있음을 주의하십시오.
    
    publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e)
    {
     string s = o.ToString() + " " + e.ToString();
     Console.WriteLine(s);
    };
    

    익명 함수 구독 이벤트를 사용하면 이벤트의 구독 취소 과정이 비교적 번거로울 수 있음을 반드시 주의하십시오.이 경우 구독을 취소하려면 이 이벤트의 구독 코드로 돌아가서 이 익명 방법을 의뢰 변수에 저장한 다음 이 의뢰를 이 이벤트에 추가해야 합니다.일반적으로 다음 코드에서 이벤트에 대한 구독을 취소해야 한다면 익명 함수를 사용하지 않는 것이 좋습니다.
    구독 취소 이벤트가 발생할 때 이벤트 처리 프로그램을 호출하는 것을 방지하려면 이 이벤트의 구독을 취소하십시오.자원 유출을 방지하려면 구독자 대상을 석방하기 전에 구독 사건을 취소해야 한다.구독 취소 이벤트에 앞서 게시 대상에서 이 이벤트의 기초가 되는 다중 방송 의뢰는 구독자가 봉인된 이벤트 처리 프로그램의 의뢰를 인용한다.게시 대상이 이 인용을 유지하기만 하면 쓰레기 회수 기능은 구독자 대상을 삭제하지 않는다.가입 취소 이벤트는 마이너스 대입 연산자(-=)를 사용하여 이벤트에 가입을 취소합니다.
    
    publisher.RaiseCustomEvent -= HandleCustomEvent;
    

    모든 구독자가 구독 이벤트를 취소하면 발행자 클래스의 이벤트 실례가null로 설정됩니다.

    좋은 웹페이지 즐겨찾기