mainForm 클래스

public partial class mainForm : Form
{
		// 네트워크 클라이언트 만들어서 변수에 할당
    ClientSimpleTcp Network = new ClientSimpleTcp();

		// 네트워크 스레드가 실행중인지를 나타내는 변수
    bool IsNetworkThreadRunning = false;
    // 백그라운드 프로세스가 실행중인지를 나타내는 변수
    bool IsBackGroundProcessRunning = false;

		// 네트워크 읽기 스레드 선언
    System.Threading.Thread NetworkReadThread = null;
    // 네트워크 전송 스레드 선언
    System.Threading.Thread NetworkSendThread = null;

		// 패킷 버퍼 매니저 선언
    PacketBufferManager PacketBuffer = new PacketBufferManager();
    // 받은 패킷들을 넣어놓을 큐 선언
    Queue<PacketData> RecvPacketQueue = new Queue<PacketData>();
    // 보낼 패킷들을 넣어놓을 큐 선언
    Queue<byte[]> SendPacketQueue = new Queue<byte[]>();

		// 일정 시간 간격으로 특정 작업을 수행하거나 하는 UI용 타이머
    System.Windows.Forms.Timer dispatcherUITimer = new();

생성자

public mainForm()
{
    InitializeComponent();
}

mainForm_Load

private void mainForm_Load(object sender, EventArgs e)
{
		PacketBuffer.Init((8096 * 10), PacketDef.PACKET_HEADER_SIZE, 1024);

		IsNetworkThreadRunning = true;
		NetworkReadThread = new System.Threading.Thread(this.NetworkReadProcess);
		NetworkReadThread.Start();
		NetworkSendThread = new System.Threading.Thread(this.NetworkSendProcess);
		NetworkSendThread.Start();

		IsBackGroundProcessRunning = true;

		dispatcherUITimer.Tick += new EventHandler(BackGroundProcess);
		dispatcherUITimer.Interval = 100;
		dispatcherUITimer.Start();

		btnDisconnect.Enabled = false;

		SetPacketHandler();
		DevLog.Write("프로그램 시작 !!!", LOG_LEVEL.INFO);
}

mainForm_FormClosing

private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
		IsNetworkThreadRunning = false;
		IsBackGroundProcessRunning = false;

		Network.Close();
}

btnConnect_Click

private void btnConnect_Click(object sender, EventArgs e)
{
		string address = textBoxIP.Text;

		if (checkBoxLocalHostIP.Checked)
		{
				address = "127.0.0.1";
		}

		int port = Convert.ToInt32(textBoxPort.Text);

		if (Network.Connect(address, port))
		{
				labelStatus.Text = string.Format("{0}. 서버에 접속 중", DateTime.Now);
				btnConnect.Enabled = false;
				btnDisconnect.Enabled = true;

				DevLog.Write($"서버에 접속 중", LOG_LEVEL.INFO);
		}
		else
		{
				labelStatus.Text = string.Format("{0}. 서버에 접속 실패", DateTime.Now);
		}
}