c#多线程如何从线程返回值

public delegate void ResultCallback(int i); public class A //被调用函数所在的类 { public A(ResultCallback callback) { this._result = callback; } private ResultCallback _result; private int i = 0; public void calledMethod() { i++; if (this._result != null) { this._result(i); } } } public class B //主线程 { public void hello(int i) { Console.WriteLine(i.ToString()); } public void testMethod() //运行的函数,启动多线程 { ResultCallback callback = new ResultCallback(hello); A temp = new A(callback); Thread t = new Thread(new ThreadStart(temp.calledMethod)); t.Start(); t.Join(); } }

C# 5.0 新增的异步和等待关键字,使得异步操作变得严重简单和易于管理,我举个例子。
static async Task<int> DoCompt(int n)
{
int res = 1;
for (int i = 1; i <= n; i++)
{
res *= i;
}
return res;
}
调用的时候,只需要 :
int res = await DoCompt(999);
就可以从后台线程中得到返回值。

当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个Task<TResult>,然后通过Task<TResult>的Result属性取得返回值,如:
static void Main(string[] args)
{
Console.WriteLine("开始计算,请稍候……");
// 直接用Task类
Task<long> result = Task.Run<long>(() =>
{
long tmp = 1L;
for (long i = 1L; i < 99999999L; i++)
{
tmp += i;
}
return tmp;
});
Console.WriteLine("计算完成,结果是{0}", result.Result);
Console.ReadLine();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-29
C# 5.0 新增的异步和等待关键字,使得异步操作变得严重简单和易于管理,我举个例子。
static async Task<int> DoCompt(int n)
{
int res = 1;
for (int i = 1; i <= n; i++)
{
res *= i;
}
return res;
}
调用的时候,只需要 :
int res = await DoCompt(999);
就可以从后台线程中得到返回值。

当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个Task<TResult>,然后通过Task<TResult>的Result属性取得返回值,如:
static void Main(string[] args)
{
Console.WriteLine("开始计算,请稍候……");
// 直接用Task类
Task<long> result = Task.Run<long>(() =>
{
long tmp = 1L;
for (long i = 1L; i < 99999999L; i++)
{
tmp += i;
}
return tmp;
});
Console.WriteLine("计算完成,结果是{0}", result.Result);
Console.ReadLine();
}本回答被网友采纳
第2个回答  2013-09-13
不能提交文字。。。
c#多线程如何从线程返回值
res *= i;} return res;} 调用的时候,只需要 :int res = await DoCompt(999);就可以从后台线程中得到返回值。当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个Task<TResult>,然后通过Task<TResult>的Result属性取得返回值,如:static void

c#多线程怎么执行有返回值的方法
type result = await Name(params);同步方法中调用异步方法并取得值:Task<type> taskOfName = Name(params);taskOfName.Start();useTaskResult(taskOfName.Result);对于返回值不再参与计算(如仅仅用于输出)时的建议:Task.Run(() => { routine1; routine2; ...});

C语言如何实现多线程同时运行
首先,需要包含pthread库的头文件。c#include <pthread.h>2. 定义线程函数: 定义一个线程将要执行的函数。这个函数必须接受一个void*类型的参数,并返回一个void*类型的值。cvoid* thread_function { \/\/ 线程执行的代码 return NULL;}创建线程:使用pthread_create函数来创建一个新线程。这个函数需要四...

c#如何结束处于监听状态的线程
1、线程自然return返回。如果线程能够返回,就可以确保下列事项的实现:(1)在线程函数中创建的所有C++对象均将通过它们的析构函数正确地释放。(2)操作系统将正确地释放线程堆栈使用的内存。(3)系统将线程的退出代码(在线程的内核对象中维护)设置为线程函数的返回值。(4)系统将递减线程内核对象的...

C#多线程问题,子线程结束后回到主线程。
可以让你更灵活来完成你想要的功能。当然,还有其他的方法。 具体可以看看多线程相关的对象。下面给你使用BackgroundWorker来完成这个功能的代码,BackgroundWorker backWorker = new BackgroundWorker();public DemoForm(){ InitializeComponent(); backWorker.DoWork += backWorker_DoWork; backW...

c#多个线程同时执行一个带参数的方法
对于需要传递多个参数的情况,我们也可以通过以下方式实现:methodA(object xxx) { object[] xx = (object[])xxx; } 这里我们将参数封装在对象数组中,这样可以传递多个参数给方法。在使用多线程时,需要注意线程安全问题,避免多个线程同时修改同一数据导致的错误。可以通过锁机制或者使用线程安全的数据...

c#中task怎么实现回调的
如ContinueWith()方法,它可以在Task完成时继续执行指定的操作。这种方式也可以实现回调机制,但与事件的方式相比,ContinueWith()方法更加简洁,易于使用。总之,在C#中,Task是一个非常强大的工具,它不仅可以简化多线程编程,还可以实现异步操作的回调机制,提高了程序的性能和灵活性。

C#中如何为一个有返回值的函数添加新线程
public class A{ public string Test() => null; public void Main() { \/\/方式1:TAP 异步模式 Task<string> task = Task.Run(new Func<string>(Test)); \/\/做些别的事情...然后获取结果 task.Wait(); string result1 = task.Result; \/\/方式2:APM 异步模式...

C# 多线程 大量数据实时接收\\解析\\存储 问题
3.1.1、将解析前的数据跟解析后的数据赋值给专门储存它们的类c。3.1.2、将类c添加到队列b中。3.1.3、将解析后的数据显示到UI线程中。3.2、如果没有读取到数据,则sleep一定时间。4、线程C循环从队列b中读取数据。4.1、如果读取到数据,则储存数据。4.2、如果没有读取到数据,则sleep一定...

一次性明白C#委托(delegate)
4. 委托的多种定义方式: 匿名方法:允许在声明委托实例时直接定义要调用的方法。 Lambda表达式:提供了一种更简洁的方式来定义匿名方法,常用于定义简单的委托。 泛型委托Action或Func:Action和Func是.NET Framework中预定义的泛型委托类型,分别用于无返回值和有返回值的方法。5. 学习资源: 官方文档...

相似回答