http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 2969|回复: 4

[其他] C#程序做循环时函数调用的过程与预想的不一样

[复制链接]
发表于 2013-10-27 12:37:13 | 显示全部楼层 |阅读模式
举个例子,有个datagridview1 以及一个自定义函数(过程),fun1()
datagridview1 有3,
第一、二列分别是参数x,y,第三列是希望调用函数得出结果 fun1(x,y);

于是做循环

for (int i=0;i<=datagridview1.rowcount; i++)
{
x=datagridview1[0,i].value;
y=datagridview1[1,i].value;
datagridview1[3,i].value=fun1(x,y);
}
(大概如此)


我的期望是: 第3列的数据是一行一行根据函数fun1(x,y) 计算并挨个填充。(即按照 i 的增长而逐个计算)


实际运行结果是,运行后,等,我等,……(等的过程是不响应别的东西的,也只能等)好,出来了,通通数据在瞬间都计算出来了。

不排除这是.net的机制。也许它认为这样省效率。
但谁能解释的更清晰一些?
为何它没按程序step by step 走? for 循环不就是这样么?

求高手释疑,谢谢先!


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-10-27 12:41:26 | 显示全部楼层
你意思是,计算出来一个填充一个?而不是等所有计算结果都出来以后才出来?


可以用委托或线程来做,计算一个在窗口显示一个。

参考http://www.sufeinet.com/forum.php?mod=viewthread&tid=3707
 楼主| 发表于 2013-10-27 12:45:01 | 显示全部楼层
970443232 发表于 2013-10-27 12:41
你意思是,计算出来一个填充一个?而不是等所有计算结果都出来以后才出来?

对的,我就是想计算出来一个填充一个。另外还主要想知道为何它没让程序的思路走呢?按step by step 调试的话,它也应该是得出一个填一个啊。

确实,之前有学习线程的时候,它就是逐个的。
发表于 2013-10-28 07:57:31 | 显示全部楼层
他用 线程就行了,不使用线程,界面是等一次程序执行完之后才会显示结果的,而不是边执行边显示,只有使用线程才是边显示边执行
 楼主| 发表于 2013-10-29 23:45:40 | 显示全部楼层
经当时群内讨论后,经兄弟们指导后得出:

解决办法,加上 Application.doevents()
或者加线程或者托管

原因:大概就是所谓主线程的关系。按钮其实还算是窗体这个线程。
讲复杂了我也说不上来。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-23 10:21

© 2014-2021

快速回复 返回顶部 返回列表