2012-03-06 33 views
2

爲了表示在線程上執行的方法,我使用 ParameterizedThreadStart並傳遞方法的名稱。在這種情況下該方法的名字是SelectJob和實例化如下:使用委託給線程傳遞方法簽名

ParameterizedThreadStart starter = new ParameterizedThreadStart(SelectJob); 

protected void SelectJob(object index) 
{ 
    ... 
} 

爲了重新使用我想,如果可能的話,該方法的名稱存儲在變量中,但代碼的一部分的智能感知顯示ParameterizedThreadStart的方法簽名爲ParameterizedThreadStart(void (object) target),我不知道如何存儲這種價值。從MSDN我意識到這是一個代表所以讀How to: Declare, Instantiate, and Use a Delegate後,我想申報...

delegate void Del(string str); 
Del selectDelegate = SelectJob; 

...但由於SelectJob方法也不是一成不變的,我沒有能夠做到這一點。簡單地將該方法設爲靜態並不是一個簡單的選擇。

有沒有其他的方式來做出這個聲明?

謝謝!

回答

3

在構造函數中初始化委託實例?

public class MyClass 
{ 
    private ParameterizedThreadStart starter; 

    public MyClass() 
    { 
     starter = SelectJob; 

     Del selectDelegate = SelectJob; 
    } 

    delegate void Del(string str); 

    protected void SelectJob(object index) 
    { 

    } 
} 
+0

謝謝。我很少關注代表的使用,雖然在概念上並不困難,但我經常很難正確實例化它們。感謝您的幫助! – McArthey 2012-03-08 15:52:38

+0

不客氣。 – 2012-03-08 15:54:29

0

您可以只需將其分配到一個操作字段在構造函數:

class Boo 
    { 
     public Boo() 
     { 
      _myDelegate = SelectJob; 

     } 

     Action<object> _myDelegate ; 
     protected void SelectJob(object index) 
     { 

     } 
    } 

另外,有一個總是返回你的委託方法:

class Hoo 
    { 


     protected Action<object> SelectJobDelegate(object index) 
     { 
      return o => 
         { 

          // do something with o 
         }; 
     } 
    }