2012-12-17 43 views
-4

我接到了一箇舊後本準則C#線程參數無效

public delegate void Worker(); 
private static Thread worker; 

public static void Init(Worker work) 
{ 
    worker = new Thread(new ThreadStart(work)); 
    worker.Start(); 
} 

public static void Work() 
{ 
    string result = testing; 
} 

我通過添加參數修改代碼,當我嘗試調用初始化(「AA」),我得到一個錯誤「最佳超載方法有一些無效參數」

以下是編輯的代碼

public delegate void Worker(); 
private static Thread worker; 

public static void Init(Worker work) 
{ 
    worker = new Thread(new ThreadStart(work)); 
    worker.Start(); 
} 

public static void Work(string testing) 
{ 
    string result = testing; 
} 
+1

你在這裏試圖做什麼? –

回答

2

Init方法採用委託和要傳遞一個字符串,這就是爲什麼沒有超載。

你想做的事:Init(Work)

PS:您的問題無關,與線程。

0

如果你想通過一些數據的線程可以使用ParametrizedThreadStart,或者匿名方法:

private static Thread worker; 

public static void Init(string testing) 
{ 
    // passing anonymous method, which will capture parameter 
    worker = new Thread(() => Work(testing)); 
    worker.Start(); 
} 

public static void Work(string testing) 
{ 
    string result = testing; 
} 

private static Thread worker; 

public static void Init(string testing) 
{ 
    // passing PrametrizedThreadStart delegate 
    worker = new Thread(Work); 
    worker.Start(testing); // passing parameter 
} 

// PrametrizedThreadStart delegate accepts object as parameter 
public static void Work(object testing) 
{ 
    string result = (string)testing; 
} 
0

的問題是你的Worker代表期望採取string參數。您需要更新並在參數中傳遞,例如

public delegate void Worker(string str); 
private static Thread worker; 
public static void Init(Worker work) 
{ 
    worker = new Thread(work); 
    worker.Start("AA"); 
} 
public static void Work(string testing) 
{ 
    string result = testing; 
}