创建有返回值的线程(C# 线程方法中返回值)

本文目录
C# 线程方法中返回值
在线程外建立一个变量,通过现场改变变量的值就可以了。线程往往会多次执行,操作后的数据一般都是通过公共变量实现的;
private delegate void VoidDelegateString(string err);//定义
在while (BusyCount 《 20)
里面加入重绘
this.Invoke(new VoidDelegateString(showData),err);
建立方法
private void showData(int err)
{
lable.text=err;
}
多线程怎么得到返回值
线程的返回值问题,最理想的办法就是线程来通知调度线程,这个调度线程可以是主线程,也可以是一个专门的调度线程,每当任务线程完成了自己的工作,就通知调度线程来取结果,这样才能够发挥出多线程的优势,而不是在那里傻等。
如果你把主线程当做调度线程,而你的主线程存在消息循环,那么,利用消息就是一个不错的通知方式。
任务线程完成了工作之后,向主线程发消息,消息中可以把任务线程本身(线程类)发给主线程,然后在主线程中取出这个线程类,然后得到任务线程的处理结果。
c#多线程怎么执行有返回值的方法
使用异步方法。
编写异步方法:
async Task《type》 Name(params){await routine1; await routine2; ... return result;}
异步方法中调用异步方法并取得值:
type result = await Name(params);
同步方法中调用异步方法并取得值:
Task《type》 taskOfName = Name(params);
taskOfName.Start();
useTaskResult(taskOfName.Result);
对于返回值不再参与计算(如仅仅用于输出)时的建议:
Task.Run(() =》 { routine1; routine2; ...});
Java 实现子线程返回值的几种方法
有三种:
(1)继承Thread类,重写run函数
创建:
class xx extends Thread{
public void run(){
Thread.sleep(1000)//线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源
}}
开启线程:
对象.start()//启动线程,run函数运行
(2)实现Runnable接口,重写run函数
开启线程:
Thread t = new Thread(对象)//创建线程对象
t.start()
(3)实现Callable接口,重写call函数
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
Callable和Runnable有几点不同:
①Callable规定的方法是call(),而Runnable规定的方法是run().
②Callable的任务执行后可返回值,而Runnable的任务是不能返回值的
③call()方法可抛出异常,而run()方法是不能抛出异常的。
④运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等
待计算的完成,并检索计算的结果.通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果
c#多线程如何从线程返回值
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();
}
C#在多线程中,如果委托传递的方法带参并且有返回值该如何编写
线程是无法通过正常方法带参和返回值的。
不过你可以通过特殊方法来实现。public delegate void ButtonChange(Button bt, string str, bool a);
public void Change(Button bt, string str, bool a)
{
bt.Text = str;
bt.Enabled = a;
}
public void ShowChange(Button bt, string str, bool a)
{
ButtonChange my = new ButtonChange(Change);
object { str, a };
bt.Invoke(my, obj);
}

更多文章:
物流调研ppt免费模板下载大全(ppt模板免费下载的网站有哪些)
2025年9月9日 05:15
switch default用法(C语言中的switch和default是什么意思)
2025年7月21日 18:15
js效果在浏览器上显示不出来(为什么360浏览器打开javascript插件时,看不到JS的效果,而IE和火狐浏览器可以)
2026年5月5日 17:45
js获取数组的最后一个元素(如何在JavaScript数组中选择最后一个元素)
2026年5月19日 23:00
服务器地址是什么(”服务器地址” 是什么 “端口号”是什么分别填写)
2025年7月25日 02:00
二维动画制作软件(二维动画制作软件CreatureAnimationPro的作用介绍)
2025年9月19日 14:30
file上传文件(ajax的Fileupload怎样实现多文件上传)
2026年5月26日 05:45
XxlJob集成GooFlow工作流?java要学到什么什么程度才能参加工作
2026年2月13日 23:00
javalibrary进入方法(java.library.path在哪)
2026年8月9日 10:00
淘宝客程序源码三合一(想购买个淘客app 哪个淘客app好)
2026年1月24日 13:45
text和textarea区别(在java里面textarea 是什么,详细作用)
2025年8月31日 19:00
powerful sense of fun(关于“电”的英语作文好句有哪些)
2026年8月20日 12:00
documents好用吗(iphone哪个视频压缩app好用)
2025年6月6日 06:15













