C\#에서 이벤트 의 정의 와 사용
하나의 이 벤트 를 설명 하고 사용 하려 면 다음 과 같은 절차 가 필요 합 니 다.
1.프 록 시 를 만 듭 니 다.
2.클래스 내부 에서 이벤트 키 워드 를 이용 하여 이 벤트 를 설명 하고 클래스 에서 이 벤트 를 호출 하 는 방법 을 정의 하 며 이벤트 메 시 지 를 처리 하 는 방법 도 정의 할 수 있 습 니 다.
하나의 사건 을 설명 하 는 기본 형식 은 두 가지 가 있다.
수식 부호 event 유형 식별 자
수식 부호 event 유형 식별 자{get{};set{};}
그 중:
수식 자 는 C\#언어의 접근 수식 자 를 가리킨다.형식 은 이벤트 사용 을 설명 하 는 첫 번 째 단계 에서 만 든 에이전트 입 니 다.식별 자 는 C\#언어의 합 법 적 인 식별 자 입 니 다.이 식별 자 는 프로그램 에서 유일 하 게 성명 을 확인 하 는 이벤트 에 사 용 됩 니 다.이벤트 의 두 번 째 형식 에서 클래스 속성 과 유사 한 get 과 set 부분 을 가지 고 이벤트 의 get 과 set 부분의 의미,사용 방법 은 모두 속성 과 유사 합 니 다.
3.사건 과 관련 된 몇 가지 방법 을 설명 합 니 다.이벤트 와 방법 을 연결 하 는 과정 은 대리 대상 참조 방법 과 유사 합 니 다.이 방법 들 은 바로 사건 을 처리 하 는 방법 이다.
4.마지막 으로 프로그램 에서 이 벤트 를 사용 합 니 다.이 벤트 를 사용 하려 면 이벤트 의 정의 나 이벤트 가 정 의 된 이벤트 호출 방법 을 직접 호출 하거나 시스템 메 시 지 를 통 해 이 벤트 를 자동 으로 촉발 해 야 합 니 다.
하나의 예 로 사건 의 사용 을 설명 하 다.
이벤트 OnfileChange 를 포함 하 는 간단 한 클래스 를 만 듭 니 다.이 종 류 는 프로그램 을 실행 하 는 디 렉 터 리(현재 디 렉 터 리,보통 프로젝트 이름/bin/debug)에서 파일 test.txt 가 존재 하 는 지 확인 합 니 다.파일 이 삭제 되 거나 생 성 되면 이벤트 가 발생 합 니 다.이 파일 을 계속 조회 할 수 있 도록 MonitorFile 방법 도 제공 합 니 다.
방법:
사용 가능 한 이 벤트 를 만 들 기 전에 먼저 의뢰 를 설명 하고 클래스 밖 에 두 십시오.
public delegate void FileWatchEventHandler(object sender,EventArgs e);
다음 클래스 FileWatch 를 만 듭 니 다.그리고 이 벤트 를 설명 합 니 다.이벤트 의 유형 은 우리 가 이전에 정의 한 의뢰 입 니 다.public event FileWatchEventHandler FileWatchEvent;
현재 생 성 방법 은 OnFileChange()입 니 다.이 방법 을 호출 하면 이벤트 가 발생 합 니 다.protected virtual void OnFileChange(EventArgs e)
{
if (FileWatchEvent!=null)
{
FileWatchEvent(this,e);
}
}
마지막 으로 생 성 방법 MonitorFile(),public void MonitorFile()
{
bool bCurrentStatus;
while(true)
{
bCurrentStatus = File.Exists("test.txt");
if (bCurrentStatus != _bLastStatus) //_bLastStatus , false;
{
_bLastStatus = bCurrentStatus;
OnFileChange(EventArgs.Empty);
}
Thread.Sleep(250);
}
}
전체 코드 는 다음 과 같 습 니 다:using System;
using System.Threading;
using System.IO;
namespace Sample.Event
{
public delegate void FileWatchEventHandler(object sender, EventArgs e);
public class FileWatch
{
private bool _bLastStatus = false;
public FileWatch()
{
//
// TODO:
//
}
public event FileWatchEventHandler FileWatchEvent;
protected virtual void OnFileChange(EventArgs e)
{
if (FileWatchEvent != null)
{
FileWatchEvent(this, e);
}
}
public void MonitorFile()
{
bool bCurrentStatus;
while(true)
{
bCurrentStatus = File.Exists("test.txt");
// , , ;
if ( bCurrentStatus != _bLastStatus )
{
_bLastStatus = bCurrentStatus;
OnFileChange( EventArgs.Empty );
}
Thread.Sleep(250);
}
}
}
}
사용:이전에 만 든 FileWatch 의 이 벤트 를 테스트 하기 위해 윈도 프로그램 을 만 듭 니 다.먼저 방금 만 든 항목 을 컴 파일 하여 Assembly:FileWatch.dll 을 만 든 다음 인용 을 추가 합 니 다.물론 항목 인용 을 직접 추가 해도 된다.그리고 윈도 프로그램 에 네 임 스페이스 를 추가 합 니 다.using Sample.Event;
그 다음 에 응용 프로그램 클래스 에서 개인 필드 를 정의 합 니 다.형식 은 우리 가 만 든 클래스 FileWatch 입 니 다.public class frmMain : System.Windows.Forms.Form
{
private Sample.Event.FileWatch FileWatchEventSource;
구조 함수 에서 이 대상 을 예화 합 니 다.public frmMain()
{
InitializeComponent();
FileWatchEventSource = new Sample.Event.FileWatch();
그리고 이벤트 에 로 컬 방법 OnFileChange 을 연결 합 니 다.FileWatchEventSource.FileWatchEvent+=new Sample.Event.FileWatchEventHandler(OnFileChange);
이 벤트 를 촉발 하기 위해 MonitorFile 방법 을 사용 해 야 합 니 다.이 예 에서,우 리 는 스 레 드 로 MonitorFile 방법 을 제어 합 니 다.이렇게 하면프로그램 이 방치 되 어 있 을 때 이 방법 을 실행 하여 이 벤트 를 촉발 합 니 다.
thrd = new Thread(new ThreadStart(FileWatchEventSource.MonitorFile));
thrd.Start();
마지막 으로 이벤트 가 실 행 될 지 여 부 를 알 아야 합 니 다.이벤트 가 실 행 된 기록 을 기록 하기 위해 서 는 Listbox 컨트롤 에 트리거 내용 을 추가 합 니 다.이벤트 가 실 행 된 후 호출 하 는 방법 은 OnFileChange 이기 때문에 이 방법 에 동작 을 넣 을 것 입 니 다.private void OnFileChange(object Sender, EventArgs e)
{
listBox.Items.Add(DateTime.Now.ToString()+": .");
}
이벤트 가 실 행 될 때 EventHanler 는 sender 와 EventArgs 류 의 인용 을 전달 합 니 다.EventArgs 류 는 보통 이벤트 소스 와 트리거 이벤트 사이 에 정 보 를 전달 합 니 다.이 예 에서 정 보 를 전달 하지 않 았 고 EventArgs 류 도 사용 하지 않 았 다.이 벤트 를 Listbox 에 추 가 했 을 뿐 입 니 다.실행 결 과 는 다음 과 같 습 니 다.
결론:C\#에서 이 벤트 를 사용 하 는 요점:
우선,의뢰 를 작성 해 야 합 니 다.형식 은:
public delegate void 의뢰 명(object sender,EventArgs e);
메모:의뢰 즉 C 의 함수 포인터 입 니 다.이벤트 에서 이벤트 및 트리거 대상 의 정 보 를 전달 해 야 하기 때문에 매개 변수 표 는 고정 되 어 있 습 니 다.의뢰 명 일반 형식:이름+EnvenHandle.이렇게 이름 을 짓 는 것 은 비교적 규범 적 이다.
그리고 이벤트 필드 를 만 듭 니 다:
public 이벤트 의뢰 유형 이벤트 이름;
메모:이벤트 키 워드 는 이벤트 입 니 다.반환 유형 은 의뢰 입 니 다.
이 벤트 를 처리 하 는 방법 을 다시 정의 하고 이 예 는 OnFileChange(EventArgs e)입 니 다.이 방법 에서 이 벤트 를 호출 해 야 합 니 다:
이벤트 이름(object,EventArgs);
여기 object 는 일반적으로 그 자체 이 고,실제 참 여 는 this 이 며,EventArgs 는 OnFileChange 에서 전 달 된 실제 참 여 를 해 야 하 며,특히 이벤트 의 값 을 전달 해 야 합 니 다.
마지막 으로 이 벤트 를 촉발 하 는 방법 을 만들어 야 합 니 다.예 를 들 어 MonitorFile()이 고 그 방법 에서 조건 이 만족 하면 OnFileChange 를 사용 하여 사건 을 촉발 하 는 목적 을 달성 합 니 다.
이 벤트 를 사용 할 때 보통 두 가지 방법 을 정의 합 니 다.하 나 는 이벤트 가 정의 하 는 의뢰 서명 과 일치 하 는 방법 입 니 다.이 예 에서 OnFileChange(Object sender,EventArgs e)입 니 다.
예 를 들 어 창 류 의 OnFileChange 와 이벤트 류 의 OnFileChange 는 다 릅 니 다.후 자 는 이벤트 호출 에 사용 되 고 전 자 는 이벤트 귀속 에 사 용 됩 니 다.이 벤트 를 연결 하 는 방법 은 간단 합 니 다.이 벤트 를 추가 하 는 것 을+=로 표시 합 니 다.-=이 벤트 를 삭제 하 는 것 을 표시 합 니 다.
예 중
FileWatchEventSource.FileWatchEvent+=new Sample.Event.FileWatchEventHandler(OnFileChange);
이벤트 추가
예:먼저 스 레 드 시작(thd.Start()을 한 다음 MonitorFile()방법 을 호출 합 니 다.이벤트 가 발생 하면 FileWatchEvent 가 발생 한 후 이벤트 FileWatchEvent 를 OnFileChange()방법 에 연결 하기 때 문 입 니 다.따라서 로 컬 창 류 인 OnFileChange()방법 을 호출 하여 현재 Listbox 에 정 보 를 추가 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.