728x90
form1.cs (이벤트 구독자)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp5
{
public partial class Form1 : Form
{
//이벤트 구독자
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.myFirst += Sum; //Sum 메서드가 수신
form2.mySecond += LabelChange;
form2.Show();
Form3 form3 = new Form3();
form3.mySecond += StrInfo; //Sum 메서드가 수신
form3.Show();
}
private void Sum(int a) //form2의 myFirst의 메서드의 매개변수 타입과 동일한 타입으로 매개변수를 지정해야 한다.
{
//myFirst 이벤트 함수를 여기서 받음
MessageBox.Show("" + a);
}
public void StrInfo(string ab)
{
MessageBox.Show(ab);
}
public void LabelChange(string aa)
{
//다른 스레드에서 발생시킨 이벤트일 경우에도 크로스 스레드 처리를 해줘야 함
this.BeginInvoke(new Action(() =>
{
label1.Text = aa;
}));
}
}
}
form2.cs(이벤트 게시자)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp5
{
public partial class Form2 : Form
{
//이벤트 게시자
public delegate void OnMyFirstHandler(int a);
///위아래는 같은 메서드명으로 해야함
public event OnMyFirstHandler myFirst;
public delegate void OnMySecondHandler(string a);
public event OnMySecondHandler mySecond;
Thread thread = null;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(threadTest));
thread.IsBackground = true;
thread.Start();
}
private void button1_Click(object sender, EventArgs e)
{
myFirst(5); //이벤트 발생 및 게시
}
private void threadTest()
{
mySecond("form2에서 제목변경 이벤트");
}
}
}
form3.cs(이벤트 게시자)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp5
{
public partial class Form3 : Form
{
//이벤트 게시자
public delegate void OnMySecondHandler(string ab); //타입에는 string.object등 모두 가능
///위아래는 같은 메서드명으로 해야함
public event OnMySecondHandler mySecond;
public Form3()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
mySecond("form3에서 텍스트 전송");
}
}
}
실행결과
Form2의 button1 클릭시
Form3의 button1 클릭시
'C# Programming > C#' 카테고리의 다른 글
[C#] 디버깅 하는방법 (0) | 2024.05.15 |
---|---|
[C#] Timer (0) | 2024.05.15 |
[C#] 비동기 프로그래밍 (0) | 2024.05.15 |
[C#] 멀티스레드 (0) | 2024.05.14 |
[C#] 데이터 베이스 연결 및 기본 CRUD (1) | 2024.05.14 |