2009-10-12 7 views
3

나는 다음과 같은 뭔가 익명의 위임 선언을 할 수 없습니다 : 예, 당신이 할 수있는C# : ThreadStart에서 익명의 대리자를 사용할 수 있습니까?

ThreadStart starter = delegate() { go(); }; 
      ... 

    static void go() 
    { 
     Console.WriteLine("Nice Work"); 
    } 

    // (or) 

    ThreadStart starter=delegate() { Console.WriteLine("Hello");} 
+0

그래, 괜찮아 보인다. 무슨 문제있어? –

+0

익명의 대리자는 코드의 다른 곳에서 사용됩니까? 이 코드가 .NET Framework v1.x를 목표로하지 않는지 궁금합니다 ... –

+1

왜 이것이 불가능하다고 생각합니까? 나는이 코드를 작동 시키도록했다. 유일한 문제는 비 UI 스레드에서 사용자 인터페이스 (Console.Writeline)를 조작하려고하는 것입니다. 그건 허용되지 않습니다. – Dabblernl

답변

3

어떤 오류가 발생합니까? 누락 된 세미콜론? 이것은 나를 위해 컴파일됩니다.

static void go() 
    { 
     Console.WriteLine("Nice Work"); 
    } 

    public void Run() 
    { 
     ThreadStart starter1 = delegate() { go(); }; 

     ThreadStart starter2 = delegate() { Console.WriteLine("Hello");}; 

     ThreadStart starter3 =() => Console.WriteLine("Hello"); 

    } 
+0

anaonymous 메서드를 ThreadStart를 입력 할 수 없습니다. 저는 ASp.NET 3.5와 C# 3.0을 사용하고 있습니다. 당신이 제공 한 동일한 예제를 컴파일하기 만하면됩니다. – user186973

+0

'using System.Threading'을 포함 시켰습니까? 해당 오류 메시지에 다른 텍스트가 있습니까? – Cheeso

+0

세미콜론을 놓쳤다 고 했으니 이제 괜찮습니다. 고맙습니다. – user186973

1

. 실제 질문은 무엇입니까? 그런데

, 당신은 당신의 두 번째 예제의 끝 부분에 세미콜론이 누락 :

ThreadStart starter=delegate() { Console.WriteLine("Hello");} 

은 다음과 같아야합니다

ThreadStart starter = delegate { Console.WriteLine("Hello"); }; 

내가 추가 한 간격이 개인의 선택이지만.

+0

그 선언에 오류 – user186973

+0

이 표시됩니다. 정확하게 오류가 무엇입니까? – mgbowen

+0

익명 메소드를 ThreadStart 유형으로 변환 할 수 없습니다. – user186973

7

ThreadStart를 건너 뛸 수 있습니다. 이것은 효과가있다.

Thread t = new Thread(() => 
{ 
    Console.WriteLine("Hello!"); 
}); 
+0

우리가 이전 .net 버전을 처리하고 있다는 느낌이 들었습니다. 이 경우에는 작동하지 않습니다. –

+0

고맙습니다. – user186973

관련 문제