2012-05-10 4 views
0

Я хотел бы выполнить метод в потоке. Метод имеет несколько аргументов и ожидает возвращаемого значения. Может ли кто-нибудь помочь?Передача метода Thread, который имеет несколько аргументов в C#

+0

ли вы можете использовать .NET 4.0? – Alex

+0

http://stackoverflow.com/questions/1314155/returning-a-value-from-thread ИЛИ http://stackoverflow.com/questions/8860141/c-sharp-thread-method-return-a-value – Robar

ответ

4
Thread thread = new Thread(() => 
     { 
      var result = YourMethod(param1, param2); 
      // process result here (does not invoked on your main thread) 
     }); 

Если вам необходимо вернуть результат в основной поток, а затем рассмотреть вопрос об использовании Task (4 C#) вместо:

var task = new Task<ReturnValueType>(() => YourMethod(param1, param2)); 
task.Start(); 

// later you can get value by calling task.Result; 

Или с предыдущей версии C#

Func<Param1Type, Param2Type, ReturnValueType> func = YourMethod;    
IAsyncResult ar = func.BeginInvoke(param1, param2, null, null); 
ar.AsyncWaitHandle.WaitOne(); 
var result = func.EndInvoke(ar); 
+1

@ Servy просто избегал в этом случае –

+0

Спасибо, что это сработало для меня – Channa

1
Func<string, int, bool> func = SomeMethod; 
AsyncCallback callback = ar => { bool retValue = func.EndInvoke(ar); DoSomethingWithTheValue(retValue }; 
func.BeginInvoke("hello", 42, callback, null); 


... 

bool SomeMethod(string param1, int param2) { ... } 
+1

@Servy, я отредактировал свой ответ –

+0

В этом случае 'DoSomethingWithTheValue' не будет выполняться в основном потоке. То же самое можно добиться простым вызовом 'Thread thread = new Thread (() => DoSomething (YourMethod (param1, param2)))' –

Смежные вопросы