2012-01-21 24 views
10

Lütfen yalnızca neden sadece System.object bağımsız değişkeninin içerdiği yönteme izin verin ParameterizedThreadStart sınıfına izin verin.Neden ParameterizedThreadStart Yalnızca Nesne Parametresine İzin Verir?

public class MainThreadTest 
{ 
    public static void Main(string[] args) 
    { 
     Thread T = new Thread(new ParameterizedThreadStart(DisplayYOrX)); 
     T.Start("X"); 

     DisplayYOrX("Y"); 
    } 

    static void DisplayYOrX(object outValue) 
    { 
     string Parameter = (string)outValue; 

     for(int i=0; i<10; i++) 
      Console.Write(Parameter); 
    } 
} 

Neden bilmek istediğim, bu tür bir yazı tipi sözdizimini tekrar kullanmak istemiyorum.

string Parameter = (string)outValue; 

cevap

15

sınırlama nedeni ThreadStart bir genel temsilci değildir ve dolayısıyla etrafında object geçme sadece yetenekli olması. Bu, değeri doğrudan ilettiğiniz bir lambda kullanarak çalışmak için yeterince kolaydır.

public static void Main(string[] args) { 
    ThreadStart start =() => { 
    DisplayYOrX("X"); 
    }; 
    Thread t = new Thread(start); 
    t.Start(); 

    ... 
} 

static void DisplayYOrX(string outValue) { 
    ... 
} 

C# 2.0

public static void Main(string[] args) { 
    ThreadStart start = delegate { 
    DisplayYOrX("X"); 
    }; 
    Thread t = new Thread(start); 
    t.Start(); 

    ... 
} 
+0

Ben 2.0 .net framework kullanmak geliştirici olarak, düşünmek için Sürüm, lambda kullanmak zordur. Doğrumuyum ? –

+0

@Frank Cevabımı güncelledim ve yeni 2.0 C# derleyicisi ile çalışacak bir sürüm ekledim. Not: C# 3.0 veya üstü derleyiciyi kullanmanız şartıyla, lambda sözdiziminin kullanılması 2.0 çerçevesinde bile geçerlidir. Her iki durumda, orada koymak I ikinci örnek her şey C# 2.0 ve – JaredPar

+0

üzerinde çalışacağız gerçekten ben 2.0 çerçeve içinde lambda sözdizimi kullanabileceğinizi söylemiştim. Öyleyse, bana nasıl yapacağımızı söyler misiniz? Referans bağlantıları var mı? –

İlgili konular