Передача сигнатуры метода с использованием делегатов в поток - PullRequest
2 голосов
/ 06 марта 2012

Для представления метода, который выполняется в потоке, я использую ParameterizedThreadStart и передаю имя метода. В этом случае имя метода - SelectJob, а экземпляр выглядит следующим образом:

ParameterizedThreadStart starter = new ParameterizedThreadStart(SelectJob);

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

Чтобы повторно использовать часть кода, я хотел бы, если возможно, сохранить имя метода в переменной, но IntelliSense показывает сигнатуру метода для ParameterizedThreadStart как ParameterizedThreadStart(void (object) target), и я не уверен, как мог хранить этот вид стоимости. От MSDN Я понимаю, что это делегат, поэтому после прочтения Как: объявить, создать экземпляр и использовать делегата Я пытался объявить ...

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

... но поскольку метод SelectJob не является статичным, я не могу этого сделать. Просто сделать метод статичным - непростая задача.

Есть ли другой способ сделать это заявление?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Инициализировать экземпляр делегата внутри конструктора?

public class MyClass
{
    private ParameterizedThreadStart starter;

    public MyClass()
    {
        starter = SelectJob;

        Del selectDelegate = SelectJob;
    }

    delegate void Del(string str);

    protected void SelectJob(object index)
    {

    }
}
0 голосов
/ 07 марта 2012

Вы можете просто назначить его полю Action в вашем конструкторе:

   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
                       };
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...