C#循环语句里如何实现执行事件,事件完成后再继续执行循环

zky0901 2017-10-18 02:59:24
for(int i=0; i<100; i++ )
{
doSomething();//这里加载其他事件,如何等这个事件执行完成后,再进入下一次循环呢?
。。。。。。
}
...全文
2532 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinbada1985 2018-01-16
  • 打赏
  • 举报
回复
引用 10 楼 zky0901 的回复:
while (rd.Read()) { zcname = rd["cname"].ToString(); zcname2 = rd["cname2"].ToString(); tt.Interval = 1000; tt.Tick += new EventHandler(tt_Tick); tt.Start(); } 是这样的代码,可每次都没执行完tt_Tick,就直接循环了
没明白 tt.Interval = 1000; tt.Tick += new EventHandler(tt_Tick); tt.Start(); 这段代码有什么用!tt应该是一个timer 定时每隔1秒启动一次!还在while 循环里面每次都重新设定一下!你直接把tt_Tick里面拿出来写不用timer就好了啊 !timer就相当一个定时的循环的线程。
qq_41638734 2018-01-16
  • 打赏
  • 举报
回复
用Switch case或用if
  • 打赏
  • 举报
回复
while循环、Sleep,甚至 WaitOne语句,这往往纠结在一起同时出现,通常都是因为满脑子只有顺序函数式编程思路而没有异步编程思路所以拼凑的代码。如果要正确地编程,那么删除 Sleep、删除 While、删除 WaitOne 语句,同时删除,才能简洁清晰地写出连续异步操作多种任务的代码。
  • 打赏
  • 举报
回复
异步回调操作,比如说你去应聘,那么面试完毕之后人家如果有需要、过些天会打电话通知你,用不着你堵着人家门口封锁人家的进出。因此此时纠结“循环”,就是跟异步完全背道而驰的理解方法。你收到人家打来的电话,才需要准备下一步的面试步骤、去见下一步的人,这些后续步骤都是在异步回调中执行的。如果说是在一个“循环中”执行,那就根本没学到异步操作相关的程序设计方法。
  • 打赏
  • 举报
回复
引用 10 楼 zky0901 的回复:
while (rd.Read()) { zcname = rd["cname"].ToString(); zcname2 = rd["cname2"].ToString(); tt.Interval = 1000; tt.Tick += new EventHandler(tt_Tick); tt.Start(); } 是这样的代码,可每次都没执行完tt_Tick,就直接循环了
语句 tt.Tick += new EventHandler(tt_Tick); 只是注册一个委托给 tt 回调,这里根本不是什么“执行事件”的概念。你把注册说成“执行”,这就是对所有的异步操作都不理解。
bluk44444 2018-01-15
  • 打赏
  • 举报
回复
for(int i = 0; i < 10; i++) { bool over = false; Task t = new Task(()=> { //dosomething over = true; }); t.Start(); while (!over) { Thread.Sleep(500); } }
丶艾洛依 2018-01-12
  • 打赏
  • 举报
回复
你断点了吗?断点走到哪里? 走完赋值就不走tt.tick了?
zky0901 2018-01-11
  • 打赏
  • 举报
回复
while (rd.Read()) { zcname = rd["cname"].ToString(); zcname2 = rd["cname2"].ToString(); tt.Interval = 1000; tt.Tick += new EventHandler(tt_Tick); tt.Start(); } 是这样的代码,可每次都没执行完tt_Tick,就直接循环了
捞鬼然然 2017-10-19
  • 打赏
  • 举报
回复
如果和楼上几位说的那种,要不用func/action??
threenewbee 2017-10-19
  • 打赏
  • 举报
回复
用yield return,调用者控制循环
xzxmustwin 2017-10-19
  • 打赏
  • 举报
回复
dosomething()返回布尔值,能做完返回true,在下一个函数中先对dosomething进行判断
ilikeff8 2017-10-18
  • 打赏
  • 举报
回复
八成你这个方法里人家是开了个线程 ,那不能这样拿来套用,用await
易2017 2017-10-18
  • 打赏
  • 举报
回复
首先,你这个不叫事件,你这只是一个方法,其次,你需要明确你执行这段方法是不是阻塞操作的,换句话说,只有你这段代码顺序执行完毕后才能继续执行主代码(你的循环函数),可以的话把你的dosomething()这个函数发过来
帅猪儿 2017-10-18
  • 打赏
  • 举报
回复
建议你对doSomething()这个函数定义一个返回值,不要是void的,比如定义它执行完毕以后返回true,这样你就可以这么做了 for(int i=0; i<100; i++ ) { if(doSomething()) break; }
正怒月神 2017-10-18
  • 打赏
  • 举报
回复
主程序本来就是同步的,一条一条语句执行啊。 执行完了在执行dothing后面的。
大然然 2017-10-18
  • 打赏
  • 举报
回复
你代码和你问的都是一样的,没有问题,dosomething() 之后又来一下循环 又一次doSomething()
cheng2005 2017-10-18
  • 打赏
  • 举报
回复
就你这么写不就是处理完doSomething()之后再继续循环吗? 不知道你想问什么。

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧