C# A.dll을 하나 만들고, C# Main에서 A.dll을 참조하여 사용하는 프로그램에서
A.dll에서 delegate를 클래스로 제공하고
Main에서 A.dll에서 제공하는 클래스의 delegate 함수에 등록 후
A.dll의 함수를 사용하여 Main의 함수를 구동하고자 한다.
// SC Manager라는 Class Library를 만들며,
// 이안에는 delegate 함수 포인터 사용을 위한 생성부와
// Start() 함수를 이용한 Thread 구동 방법이 있다.
// Sc_Manager.dll 내부 구조
public class Sc_Manager
{
Thread m_ScThreadID = null;
// USER에게 제공해 주기 위한 함수 포인터 선언.
public delegate void ScReg();
public ScReg[] Sc_Mng;
public int Sc_MaxCnt = 0;
public string Sc_Name = string.Empty;
public bool bStillAlive = false;
public Sc_Manager(int nScCnt = 1)
{
Sc_MaxCnt = nScCnt;
// Scenario 개수만큼 함수포인터 생성
Sc_Mng = new ScReg[Sc_MaxCnt];
}
public bool Start()
{
if (bStillAlive == true) return true;
if (m_ScThreadID != null)
{
m_ScThreadID.Abort();
m_ScThreadID = null;
}
m_ScThreadID = new Thread(Run_ScenarioThreading);
m_ScThreadID.Start();
return true;
}
// threading processing.
void Run_ScenarioThreading()
{
bool nExecute = true;
do
{
if (bStillAlive == true) break;
bStillAlive = true;
int nMaxCnt = Sc_MaxCnt;
for (int SCnt = 0; SCnt < nMaxCnt; SCnt++)
{
// 본 프레임워크에서 함수 포인터로 함수를 실행시켜야 한다.
if (Sc_Mng[SCnt] != null)
Sc_Mng[SCnt]();
}
bStillAlive = false;
break;
} while (nExecute);
}
}
// 상기 Sc_Manager.dll을 사용하는 Main 부
private void btnLoadSc_Click(object sender, EventArgs e)
{
// Create Scenario Manager
Sc_Manager Scenario = new Sc_Manager(1);
Scenario.Sc_Name = "LoadControllers";
Scenario.Sc_Mng[0] = new Sc_Manager.ScReg(Load_Step_1);
Scenario.Start();
}
delegate를 활용하니 참 좋당^^
'프로그래밍 > .Net' 카테고리의 다른 글
string 문자열 파싱해보자 (0) | 2014.01.17 |
---|---|
c# 소멸자 만들기 (0) | 2014.01.17 |
DllImport 사용 ini 파일에서 정보 가져오거나 Write하기 (0) | 2014.01.17 |
많은 컨트롤을 배열에 넣어보자 (0) | 2014.01.17 |
C#에서 using 사용하기 (0) | 2014.01.17 |