반응형
1. 디버깅
Debug: 디버그 빌드에 사용
Trace: 디버그 / 릴리즈 빌드에 사용
public static class DebugClass
{
public static void Debuggging( string dbgMsg )
{
Debug.WriteLine(dbgMsg); //디버그만 출력
Trace.WriteLine(dbgMsg); // 디버그 릴리즈 모두 출력
// 1. DefaultTraceListener 사용. VS Output 창에 로깅
Trace.WriteLine("Default Logging");
// 2. 콘솔에 로깅
Trace.Listeners.Clear();
Trace.Listeners.Add(new ConsoleTraceListener());
Trace.WriteLine("Console Log");
// 3. 파일에 로깅
Trace.Listeners.Clear();
Trace.Listeners.Add(new TextWriterTraceListener("Logs.txt"));
Trace.AutoFlush = true;
Trace.WriteLine("File Log");
//Trace.Flush(); // AutoFlush 하지 않으면 수동으로 Flush 할 것
// 4. EventLog에 로깅
Trace.Listeners.Clear();
Trace.Listeners.Add(new EventLogTraceListener("Application"));
Trace.WriteLine("My Event Log");
// 5. 콘솔과 파일에 동시 로깅
Trace.Listeners.Clear();
Trace.Listeners.Add(new ConsoleTraceListener());
Trace.Listeners.Add(new TextWriterTraceListener("Logs.txt"));
Trace.AutoFlush = true;
// Trace*() 메서드들 사용
Trace.TraceInformation("My Info");
Trace.TraceWarning("My Warning");
Trace.TraceError("My Error");
}
}
2. 프로세스 실행
Process[] listProcess = Process.GetProcessesByName("프로세스이름");
// 해당 프로세스가 없다면,
if (listProcess.Length < 1)
{
Process.Start("프로세스 실행 경로");
}
3. lock 키워드 사용
: 특정 블럭의 코드(Critical Section)를 한번에 하나의 쓰레드만 실행할 수 있도록 해준다. lock()의 파라미터에는 임의의 객체 지정 사용한다. private object obj = new object() 와 같이 필드를 생성한 후, lock(obj)처럼 사용.
using System;
using System.Threading;
namespace MultiThrdApp
{
class MyClass
{
// lock문에 사용될 객체
private object lockObject = new object();
public void TestThread()
{
for (int i = 0; i < 10; i++)
{
new Thread(Thread1).Start();
}
}
private void Thread1()
{
// 한번에 한 쓰레드만 lock블럭 실행
lock (lockObject)
{
Console.WriteLine("A");
Thread.Sleep(1000);
Console.WriteLine("B");
}
}
}
}
4. 싱글톤 패턴 클래스 디자인하기
class Singleton
{
private static Singleton instance=null;
private Singleton()
{
}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
// 사용은 Singleton obj1 = Singleton.Instace();
5. 스레드 사용/ 스레드 리소스 해제 및 소멸
public class MyClass : IDisposable
{
private bool isThreadRunning = false;
private Thread thread;
public MyClass()
{
thread = new Thread(ThreadMethod);
thread.Start();
}
private void ThreadMethod()
{
while (!isThreadRunning)
{
// 스레드가 실행되는 동안 계속 반복
}
}
public void Dispose()
{
StopThread();
GC.SuppressFinalize(this);
}
private void StopThread()
{
isThreadRunning = true;
if (thread != null && thread.IsAlive)
{
thread.Join(); // 스레드가 종료될 때까지 대기(스레드 안전 종료)
// thread.Abort(); // 스레드 강제 종료 필요시 사용.
}
}
}
// 사용법
using (MyClass myObject = new MyClass())
{
// myObject 사용
} // 이 지점에서 Dispose가 자동으로 호출됩니다.
728x90
'Programming > C# - Window' 카테고리의 다른 글
C#/ WPF 1. App.xaml (0) | 2024.09.04 |
---|---|
C#/ WPF 시작하기(구성) (0) | 2024.09.02 |
C#/ string.Format() 사용 (0) | 2024.01.22 |
C#/ PLC 제어 관련(가상 시뮬레이터 GX Works2) (0) | 2024.01.20 |
C#/ Tip 1 (2) | 2024.01.03 |