// 메인 폼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace DelTest
{
public partial class MainForm : Form
{
private ReceiverClass _clsReceiver;
private Thread _thReceive;
public MainForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
_clsReceiver = new ReceiverClass(this);
OutPutMsg("클래스 생성");
_thReceive = new Thread(new ThreadStart(_clsReceiver.Start));
OutPutMsg("스레드 생성");
_thReceive.Start();
OutPutMsg("스레드 실행");
}
// 메세지 출력
public void OutPutMsg(string strMsg)
{
listView1.Items.Add(strMsg);
}
// 종료시 스레드 종료후 종료
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (_thReceive != null)
{
while (_thReceive.ThreadState != ThreadState.Stopped)
{
_clsReceiver.Stop();
}
}
}
}
}
// 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelTest
{
class ReceiverClass
{
public delegate void DgMsgEvtSend(string strMsg);
private bool _shouldStop;
private MainForm _mainForm;
// 생성자
public ReceiverClass(MainForm mainForm)
{
_mainForm = mainForm;
_shouldStop = true;
}
public void Stop()
{
MsgRun("스레드 정지 명령을 보냅니다.");
_shouldStop = false;
}
public void Start()
{
while (_shouldStop)
{
MsgRun("스레드 메세지를 보냅니다.");
System.Threading.Thread.Sleep(1000);
}
}
// 메세지 invoke 처리
private void MsgRun(string strMsg)
{
_mainForm.Invoke(new DgMsgEvtSend(_mainForm.OutPutMsg), strMsg);
}
}
}
댓글 없음:
댓글 쓰기