6/01/2010

Thread C#

- 쓰레드에서 간단하게 Invoke 하기 - 
Thread를 사용하다 보면 하위 Thread에서 메인 Thread의 변수에 접근하기 위해 Invoke Method를 쓸 때가 종종 있다.

하지만 Invoke Method를 쓸 때 delegate와 그 delegate와 연결시킬 method가 필요한데, 이를 Event를 사용하면 소스코드가 한결 간단해진다.

그 예는 아래와 같다.


원본소스
private void StartThread()
{
    Thread thread = new Thread(new ThreadStart(SleepThread));
    thread.Start();
}

private void SleepThread()
{
    System.Threading.Thread.Sleep(800);

    this.Invoke(new SleppThreadDelegate(InvokeMethod));
}

public delegate void SleppThreadDelegate();

private void InvokeMethod()
{
    this.timer.Start();
}

이 소스를 아래와 같이 변경가능
private void StartThread()
{
    Thread thread = new Thread(new ThreadStart(SleepThread));
    thread.Start();
}

private void SleepThread()
{
    System.Threading.Thread.Sleep(800);

    this.Invoke(new EventHandler(delegate(object o, EventArgs a)
    {
        this.timer.Start();
    }));
}

http://blog.opennetcf.com/ctacke/2008/12/03/ControlInvokeWithoutExplicitDelegates.aspx




- 다중 매개변수를 갖는 쓰레드 돌리기 - 
// function that running in a thread
void DoSomething(string param1, string param2, string param3)
{
}
// The parameters.
string param1 = "Hey";
string param2 = "You";
stirng param3 = "There";

// The delegate to call.
ThreadStart ts = delegate() { DoSomething(param1, param2, param3) };

// The thread.
Thread t = new Thread(ts);

// Run the thread.
t.Start();

댓글 없음:

댓글 쓰기