안녕하세요.
뻑하면 기초적(?) 질문으로 질문을 드리게 됩니다.
제목이 이상할 수 있습니다만, 설명을 드리면
스레드스타트에 지정되는 메소드의 위치에 대해 질문입니다.
가령 이런 클래스가 있다고 하겠습니다.
public delegate void TestDelegate(string msg);
public class TestClass
{
public static TestDelegate tdMsg { get; set; }
public int loopcount { get; set; }
private string msg { get; set; }
...
public TestClass(string msg)
{
this.msg = msg;
}
...
public void Start()
{
// Execute
}
...
private void MethodA() { ... }
private bool MethodB() { ... }
private void MethodC() { ... }
}
이 경우 TestClass 전체를 스레드로 묶어서 동작하게 하고싶은데
어떤 방법이 있는가 합니다.
우선 제가 생각하는 방법은 아래의 2가지가 있습니다.
// 1번
private void ShowMsg(string msg) { ... }
void Main(string[] args)
{
TestClass.tdMsg = new TestDelegate(ShowMsg);
TestClass tc = new TestClass("Hello");
tc.loopcount = 100;
Thread t = new Thread(new ThreadStart(tc.Start));
t.Start();
t.Join();
}
// 2번
// *** TestClass에 TStart()라는 static 메소드를 선언합니다.
public class TestClass
{
... 위 코드와 동일 ...
public static int Tloopcount { get; set; }
public static void TStart(object msg)
{
TestClass tc = new TestClass(msg.ToString());
tc.Start();
}
}
void Main(string[] args)
{
TestClass.tdMsg = new TestDelegate(ShowMsg);
TestClass.Tloopcount = 100;
Thread t = new Thread(new ParameterizedThreadStart(TestClass.TStart));
t.Start("Hello");
t.Join();
}
이렇게 2가지 입니다.
현재 제가 사용하는 방법은 2번입니다만,
다른 방법이 있는지 혹은 1번과 2번중 어떤 방법이 효율적인지 궁금합니다.
[최초 등록일: ]
[최종 수정일: 6/16/2010]