C#에서 이벤트를 보내는 방식이다.
이벤트를 보내는 것은 함수를 호출하는 것과 같다.
아래 예제 소스의 호출 순서도 함께 올린다.
C++ PostMessage와 같이 윈도우 Queue에 넣고 현재 프로세스를 진행하고 나중에 Message를 처리하는 그런 방식으로 구현을 하려면 Event Handler 방식으로는 처리를 할 수가 없다.
한 Class에서 다른 Class의 함수를 처리하면서 현재 Class에서 관련 내용을 마무리 하는 방식으로 구현을 할 때 이용을 할수가 있다.
아래 예제 코드는 Console 프로그램이다.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleEventTest
{
public class EventDelegateTest
{
public delegate void MyEventHandler();
public event MyEventHandler TestEvent;
public void Do()
{
Trace.WriteLine("11");
TestEvent?.Invoke();
}
}
public class EventTest
{
public event EventHandler TestEvent2;
public void Do()
{
Trace.WriteLine("33");
TestEvent2(this, EventArgs.Empty);
}
}
class Program
{
static void Main(string[] args)
{
Trace.WriteLine("1");
EventDelegateTest edt = new EventDelegateTest();
edt.TestEvent += new EventDelegateTest.MyEventHandler(doAction);
Trace.WriteLine("2");
edt.Do();
Trace.WriteLine("3");
EventTest et = new EventTest();
et.TestEvent2 += new EventHandler(doAction2);
et.Do();
Trace.WriteLine("4");
}
static void doAction()
{
Trace.WriteLine("22");
Console.WriteLine("Call event");
}
private static void doAction2(object sender, EventArgs e)
{
Trace.WriteLine("44");
Console.WriteLine("Call event2");
}
}
}
위의 코드가 정상 실행되면 아래와 같은 순서로 처리가 된다.
1
2
11
22
3
33
44
4
위의 순서와 같이 함수 콜을 하는 것과 같다.
현재 class에서 EventDelegateTest 도는 EventTest 객체의 함수를 호출했지만 그 결과를 현재 class에서 처리를 할 때 사용을 하면 된다.
'.NET' 카테고리의 다른 글
AutoResetEvent Class 샘플 예제 분석 (0) | 2023.10.24 |
---|---|
System.Threading Monitor Class 예제 분석 (1) | 2023.10.24 |
Network Interface Status Event (0) | 2023.05.24 |
C#에서 네트워크 드라이브(Network Drive) 연결 방법 (0) | 2023.05.24 |
Team Foundation Server 버전 제어" 경고 메시지 제거 방법 (0) | 2023.04.20 |