Интерфейс используется для полиморфизма, который относится к Объектам, не типам. Поэтому (как уже отмечено) не имеет никакого смысла иметь статического интерфейсного участника.
Ага:
Thread t = new Thread (new ParameterizedThreadStart(myMethod));
t.Start (myParameterObject);
Вы можете использовать метод BackgroundWorker RunWorkerAsync и передать свое значение.
Вы можете использовать делегат ParametrizedThreadStart :
string parameter = "Hello world!";
Thread t = new Thread(new ParameterizedThreadStart(MyMethod));
t.Start(parameter);
ParameterizedThreadStart
принимает один параметр. Вы можете использовать это для отправки одного параметра или настраиваемого класса, содержащего несколько свойств.
Другой метод - поместить метод, который вы хотите запустить, как член экземпляра в классе вместе со свойствами для параметров, которые вы хотите установить . Создайте экземпляр класса, установите свойства и запустите поток, указав экземпляр и метод, и метод получит доступ к свойствам.
class Program
{
static void Main(string[] args)
{
Thread t = new Thread(new ParameterizedThreadStart(ThreadMethod));
t.Start("My Parameter");
}
static void ThreadMethod(object parameter)
{
// parameter equals to "My Parameter"
}
}
Thread thread = new Thread(Work);
thread.Start(Parameter);
private void Work(object param)
{
string Parameter = (string)param;
}
Тип параметра должен быть объектом.
РЕДАКТИРОВАТЬ:
Хотя этот ответ не является неправильным, я не рекомендую этот подход. Использование лямбда-выражения намного проще для чтения и не требует преобразования типов. См. Здесь: https://stackoverflow.com/a/1195915/52551
Одна из двух перегрузок конструктора Thread принимает делегат ParameterizedThreadStart, который позволяет передать один параметр методу start . К сожалению, он допускает только один параметр и делает это небезопасным способом, поскольку передает его как объект. Я считаю, что гораздо проще использовать лямбда-выражение для захвата соответствующих параметров и их передачи строго типизированным способом.
Попробуйте следующее
public Thread StartTheThread(SomeType param1, SomeOtherType param2) {
var t = new Thread(() => RealStart(param1, param2));
t.Start();
return t;
}
private static void RealStart(SomeType param1, SomeOtherType param2) {
...
}