在C#中多线程运行一旦开启,是没办直接返回你要的结果的,但有时候我们确实需要线程给我们结果要怎么做呢?
答案是传递一个回调函数。看具体的例子,假设我有一个求自然数的累加和函数,我想让一个线程单独运行,且返回结果。
构建一个类:
- public class NumberHelper
- {
- private int _Number;
- private Action<int> _Action;
- public NumberHelper(int number,Action<int> resultCallback)
- {
- _Number = number;
- _Action = resultCallback;
- }
-
- public void Calculate()
- {
- int result = 0;
- for(int i=0;i<_Number;i++)
- {
- result += i;
- }
- if(_Action != null)
- {
- _Action(result);
- }
- }
- }
这个类不仅接受参数Number,还接受一个回调函数:Action
我们在调用的时候就很简单了:
- NumberHelper g = new NumberHelper(10, ResultCallBackMethod);
- Thread t2 = new Thread(g.Calculate);
- t2.Start();
-
-
- static void ResultCallBackMethod(int Result)
- {
- Console.WriteLine($"累加和为: {Result}");
- }
这里只是简单地打印,事实上还可以将取值拿出来,做法类似于上一节提到的如何给多线程函数传递安全类型参数。