C# 多线程获得返回值

C# 多线程获得返回值,第1张

如果用多线程的话,相直接获取是没有办法的,因为这个程序是在另一个线程中执行的,当前线程会不等它执行完,就把后面的代码执行掉了

变通的方法,把这个方法执行的结果赋值给一个静态变量,然后读取这个静态变量的值~~~

如果有多个值,你可以把这些值放到一到静态的数组或是hashtable中~~~

其实你这个思路是错误的:

根据你的说明,你是想在每个页面都有去执行这个方法,而且还要获取结果。

1、这个线程和你的当前页面不在同一个线程,当前页面并不知道你这个ThreadTryRequest在别的线程中是什么样的状态,当前页面的代码也不会等你这个这个线程执行完就执行掉了,所以你不可能马上拿到这个线程的值的。

2、你这个应用,明显不该用异步的线程来执行,如果要用同步模式,我不知道你这个是为了什么目的把它放到线程中执行,因为你用同步模式,你想等这个线程的执行结果,等的时间和在页面顺序执行是一样的甚至更多~~~

你可以说一下你的目的是什么吗? 就你的描述来看,你根本没必要用线程。。。

从你的代码来看,你可能是想提高页面打开速度,把执行慢的代码放到线程中执行。。。 如果从这个思路来看是对的,不过光这样可不用,你还得用缓存,把执行结果放到缓存中再由线程或是线程池来维护。。。

总之,在一个页面中执行这么低效率的代码,整个解决方案就有问题。。。

===================================================================

public string ThreadTryRequest(string strUrl, string parm)

{

Thread thrOne = new Thread(thisThreadProc); //创建线程

ThreadParameter parameter = new ThreadParameter(); //实例化ThreadParameter对象,并赋值

parameterStrUrl = strUrlToString();

parameterparm = parmToString();

thrOneStart(parameter); //开启线程

return strState; //返回字符串

}

你想在这里就获取到值 那是获取不到的 return strState; 执行了

thisThreadProc(parameter) 还没执行完了,这个时候strState 还没被赋值,

所以我说你的思路是错误的

你想当时就知道一个线程的执行结果,除非你等~~~ 要不获取不到的~~~

js中可以用 windowreturnvalue来获得网页的返回值!

asp中为requestfrom("OBJ_NAME") 取用POST方法提交的数据

requestget("OBJ_NAME") 取用GET方法提交的数据!

php中 $_POST["OBJ_NAME"] 取用POST方法提交的数据

$_GET["OBJ_NAME"] 取用GET方法提交的数据!

shell中,$ 就是上一个执行命令或函数的返回码, 例如 执行命令xxxxx echo $ 就输出了执行命令xxxxx的返回码,当然也可以把$保存到一个变量中,用于后续的计算或者其他判断逻辑。

se "$x" in

y | yes ) return 0;;

n | no ) return 1;;

) echo "Answer yes or no"

shell结束用return跳出while true

while true 是一直为真,不断循环,直到输入yes或no时,用return退出shell程序。程序结束了,循序肯定也结束了。

-------------------------

补充:也就是说while true 实际是一个死循环。我可以这样理解么?我们是用return 返回0或1来退出循环。能把代码运行步骤说一下么。输入三个数据分别是yes,no和其他任意的。

可以说是死循环。不是说所有的死循环都不好,这里的死循环保证了程序一直运行,直到得到你想要的结果。

输入yes,返回0,就是正常结束

输入no,返回1,就是异常结束

输入其它的,则进行下一轮循环,要求你重新输入

如果用多线程的话,相直接获取是没有办法的,因为这个程序是在另一个线程中执行的,当前线程会不等它执行完,就把后面的代码执行掉了

变通的方法,把这个方法执行的结果赋值给一个静态变量,然后读取这个静态变量的值~~~

如果有多个值,你可以把这些值放到一到静态的数组或是hashtable中~~~

其实你这个思路是错误的:

根据你的说明,你是想在每个页面都有去执行这个方法,而且还要获取结果。

1、这个线程和你的当前页面不在同一个线程,当前页面并不知道你这个ThreadTryRequest在别的线程中是什么样的状态,当前页面的代码也不会等你这个这个线程执行完就执行掉了,所以你不可能马上拿到这个线程的值的。

2、你这个应用,明显不该用异步的线程来执行,如果要用同步模式,我不知道你这个是为了什么目的把它放到线程中执行,因为你用同步模式,你想等这个线程的执行结果,等的时间和在页面顺序执行是一样的甚至更多~~~

你可以说一下你的目的是什么吗? 就你的描述来看,你根本没必要用线程。。。

从你的代码来看,你可能是想提高页面打开速度,把执行慢的代码放到线程中执行。。。 如果从这个思路来看是对的,不过光这样可不用,你还得用缓存,把执行结果放到缓存中再由线程或是线程池来维护。。。

总之,在一个页面中执行这么低效率的代码,整个解决方案就有问题。。。

===================================================================

public string ThreadTryRequest(string strUrl, string parm)

{

Thread thrOne = new Thread(thisThreadProc); //创建线程

ThreadParameter parameter = new ThreadParameter(); //实例化ThreadParameter对象,并赋值

parameterStrUrl = strUrlToString();

parameterparm = parmToString();

thrOneStart(parameter); //开启线程

return strState; //返回字符串

}

你想在这里就获取到值 那是获取不到的 return strState; 执行了

thisThreadProc(parameter) 还没执行完了,这个时候strState 还没被赋值,

所以我说你的思路是错误的

你想当时就知道一个线程的执行结果,除非你等~~~ 要不获取不到的~~~

1、直接调用或者call 过程名 call 函数名就可以了,比如

Private Sub CommandButton1_Click()

MsgBox "你调用了CommandButton1_Click过程"

End Sub

Private Sub CommandButton2_Click()

Call CommandButton1_Click

End Sub

2、如果有参数的话需要带上参数,比如

Private Sub CommandButton1_Click()

Call MsgStr("这是过程/函数调用示例")

End Sub

Sub MsgStr(str As String)

MsgBox str

End Sub

扩展资料:

在一个变化过程中,发生变化的量叫变量,有些数值是不随变量而改变的,我们称它们为常量。

自变量:一个与它量有关联的变量,这一量中的任何一值都能在它量中找到对应的固定值。

因变量:随着自变量的变化而变化,且自变量取唯一值时,因变量有且只有唯一值与其相对应。

函数值:在y是x的函数中,x确定一个值,y就随之确定一个值,当x取a时,y就随之确定为b,b就叫做a的函数值

输入值的集合X称为F的域;可能输出值的集合Y称为F的域。函数的值域是指通过映射定义域中所有元素的F而获得的实际输出值的集合。请注意,将函数的值字段称为函数的相应字段的子集是不正确的。

在计算机科学中,参数和返回值的数据类型决定了子程序的定义域和对应域。因此,定义域和相应的域是在函数开始时确定的强制约束。另一方面,价值域与实际实现相关。

参考资料:

百度百科-函数

以上就是关于C# 多线程获得返回值全部的内容,包括:C# 多线程获得返回值、如何获取网页中的返回值、用shell执行的程序怎么取得返回值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9511003.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存