C#中 多线程执行含有返回值的函数
-------------2017-06-09 更新-----------------------------------
如果你想不阻塞主线程地执行某个任务,并想在该任务结束时把结果显示在界面上,可以使用:
方法1:使用binding,在线程中改变结果值时手动notify。
方法2:使用ContinueWith
方法3:使用await、async
以下方法是个人的土办法,已经过时了。。
=================================================================================================================
C# 中,传统的多线程并不支持多线程执行含有返回结果的函数。虽然可以通过制作外壳类来使得返回结果得以保留,但如果一定时间内函数未执行完,简单的外壳类可能就无法满足需求了。
class netHelper
{
public static string sendResult = ""; public void yourFunction(Object obj)
{
Thread.Sleep(); sendResult = "the result after excuted";
}
}
如此一来,只要我们先多线程调用yourFunction,就可以在sendResult里获得结果。
那么问题来了,如过实际的函数像我上面写的一样,含有一个非常耗时间的操作,那么我们用来存储执行结果的变量可能就还没来得及被赋值,而什么时候能得到返回结果、有返回结果之后如何获得,也是个问题。
第二个是使用Task。
Task<string> yourTask = new Task<string>(()=>{Thread.Sleep(); MessageBox.Show("afterthis i go");} ); yourTask.Start(); string result = yourTask.result;
Task内部虽然保证了result只有在有结果的时候才会被赋值,但是同样,如果这个函数的执行时间非常长,你又在父级里调用了yourTask.Result,那么task就相当于阻塞运行;如果父进程是个ui进程,ui还会卡死。
解决方案是,新建一个线程,专门等待Task的返回结果,有结果返回再保存什么的。问题解决。
C#中 多线程执行含有返回值的函数的更多相关文章
- Swift2.0语言教程之函数的返回值与函数类型
Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...
- Selenium2学习-036-WebUI自动化实战实例-034-JavaScript 在 Selenium 自动化中的应用实例之六(获取 JS 执行结果返回值)
Selenium 获取 JavaScript 返回值非常简单,只需要在 js 脚本中将需要返回的数据 return 就可以,然后通过方法返回 js 的执行结果,方法源码如下所示: /** * Get ...
- paip.java 多线程参数以及返回值Future FutureTask 的使用.
paip.java 多线程参数以及返回值Future FutureTask 的使用. 在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是vo ...
- BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题
BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题 原文:http://www.sufeinet.com/thread-3707-1-1.html 大家可以先看看我上 ...
- 慕课网-Java入门第一季-7-3 Java 中无参带返回值方法的使用
来源:http://www.imooc.com/code/1579 如果方法不包含参数,但有返回值,我们称为无参带返回值的方法. 例如:下面的代码,定义了一个方法名为 calSum ,无参数,但返回值 ...
- Java 中无参带返回值方法的使用
如果方法不包含参数,但有返回值,我们称为无参带返回值的方法. 例如:下面的代码,定义了一个方法名为 calSum ,无参数,但返回值为 int 类型的方法,执行的操作为计算两数之和,并返回结果 在 c ...
- C#中的函数(二) 有参有返回值的函数
接上一篇 C#中的函数(-) 无参无返回值的函数 http://www.cnblogs.com/fzxiaoyi/p/8502613.html 这次研究下C#中的函数(二) 有参有返回值的函数 依然写 ...
- JavaScript 在函数中使用Ajax获取的值作为函数的返回值
解决:JavaScript 在函数中使用Ajax获取的值作为函数的返回值,结果无法获取到返回值 原因:ajax默认使用异步方式,要将异步改为同步方式 案例:通过区域ID,获取该区域下所有的学校 var ...
- python中os.system()的返回值
[python中os.system()的返回值] 如果第三方程序返回的是布尔型返回值,os.system会将true转为1,false转为0进行返回. 问题: /bin/xxx.py是一个返回码为1的 ...
随机推荐
- PostgreSQL的 initdb 源代码分析之三
继续 其实接前面,整个while循环是这样的: ) { switch (c) { ...... } ...... } 这一句,c = getopt_long(argc, argv, "dD: ...
- 对PostgreSQL中tablespace 与 database, table的理解
开始: 当前的tablesapce信息 pgsql=# select * from pg_tablespace; spcname | spcowner | spclocation | spcacl | ...
- Telnet端口测试
$IP ="220.181.111.142"$Port ="801" Function Port-Test ($IP,$Port){ $Timeout = 10 ...
- delphi 使用进度条查看浏览器状态
使用进度条查看浏览器状态 procedure TForm1.WebBrowser1ProgressChange(ASender: TObject; Progress, ProgressMax ...
- 小白日记12:kali渗透测试之服务扫描(二)-SMB扫描
SMB扫描 Server Message Block 协议.与其他标准的TCP/IP协议不同,SMB协议是一种复杂的协议,因为随着Windows计算机的开发,越来越多的功能被加入到协议中去了,很难区分 ...
- BootStrap2学习日记2--将固定布局换成响应式布局
概要:响应式页面是指页面根据浏览平台(尺寸)的不同显示不同的CSS. 原理:在Html的的头加入代码 <style> /*当浏览器宽度大于767是 采用括号里面的CSS样式*/ @medi ...
- Football
Football Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2882 Accepted: 1466 Descript ...
- .NET自动识别HttpWebResponse的编码及是否压缩
请求和响应头 POST的数据 最近项目使用HttpWebRequest请求网页,处理HttpWebResponse返回消息体,发现网页可能是有GZIP压缩等,所得数据乱码,所以相处了解决方案,大家共同 ...
- 用RSA实现Web单点登录密码的加密传输
在使用通用权限管理系统(吉日嘎拉)的单点登录功能时,对登录密码使用了RSA加密(非对称加密),有使用这个权限管理系统的可参考下. 前端部分,请引用以下几个js文件: <script type=& ...
- Python mongoDB 的简单操作
#!/usr/bin/env python # coding:utf-8 # Filename:mongodb.py from pymongo import MongoClient,ASCENDING ...