2011-10-12 5 views
1

내 코드에서 스레드를 실행 중입니다. 지금해야 할 일은 "SayHello"메소드에 변수를 전달하는 것입니다. 그것은 별도의 스레드에서 호출하기 때문에 내 변수는 스레드에서 볼 수 없습니다.C#에서 스레드에 변수를 전달하는 방법은 무엇입니까?

ThreadStart ts = new ThreadStart(SayHello); 
mThread = new Thread(ts); 
mThread.Start(); 

Im는 C#에 익숙하지 않으며 알려 주시면 알려드립니다.

+0

다음을 읽어보십시오. http://www.albahari.com/threading/ –

답변

1

이것은 값을 전달하는 방법입니다. 먼저 매개 변수가 객체 여야하므로 메소드에서 형변환해야합니다.

string sParameters = "This is my parameter"; 
Thread thrProcess = new Thread(MyMethod); 
thrProcess.IsBackgroud = true; // only if needed 
thrProcess.Start(sParameters); // string derives from object 

그리고 당신의 방법 :

void MyMethod(object param) 
{ 
    string sParameterValue = (string)param; 
// Now you can work with sParameterValue 
} 
귀하의 방법을 사용하면 값을 반환해야 할 경우, 당신은 다음 등 여러 가지 휘발성 변수 또는 스레드 통신에 그것을 할 수 무효 반환해야합니다

둘 이상의 변수를 전달해야하는 경우 클래스를 만들고 속성에 값을 할당하고 메서드에 캐스트하면되지만이를 다른 방법으로 보관할 수 있습니다. 희망이 도움이됩니다. 더 많은 정보가 필요하시면 chech this 링크 : Threading in C#

행운을 빕니다!

0

개체를 통해서만 통과 할 수 있습니다.

//Declaring the Thread  
Thread T1; 

// Calling the Thread 
object[] threadPass = { String1, String2, Int1 }; 
T1 = new thread(Threadvoid); 
T1.Start(threadPass); 

// Thread Void 
void Threadvoid(object passedObject) 
{ 
    //Take the variables back out of the object 
    object[] ThreadPass = passedObject as object[]; 
    string String1 = ThreadPass[0].ToString(); 
    string String2 = ThreadPass[1].ToString(); 
    int Int1 = Convert.ToInt32(ThreadPass[2]); 
} 
관련 문제