函数返回值后,能否继续执行函数体

syue126 2018-01-08 02:57:27
先上代码

public bool Start()
{
if (bTrue)
{
doSomething();
//Thread t = new Thread(doSomething);
//t.Start();
return true;
}
else
{
return false;
}
}

这是我写的动态链接库里的一个方法,要求有一个bool类型的返回值。问题是doSomething()是需要一直持续运行的,只要开始运行就可以返回True值了,但是如果返回值,函数体就运行结束了。如果采用注释掉的代码,用多线程的方法是可以实现的,但我不希望这样解决。请问高手有没有什么其他的方式解决。
...全文
813 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2018-01-15
  • 打赏
  • 举报
回复
在同一个线程里面执行是不可能的,因为这个线程在返回之后,是没有断点的。不可能返回到你的循环内部的。 如果确实需要在同一个线程内部做, 可以使用 Fiber 来做。 我在使用类似 EnumWindows 这样的函数时候,又需要使用 foreach 来枚举的时候,就是这样的。 此时的断点在++iterator 的地方。 当需要枚举下一个时候,切换进纤程执行。
syue126 2018-01-15
  • 打赏
  • 举报
回复
引用 10 楼 caozhy 的回复:
理论上有一种情况可以: try { throw new Exception(); } catch { return 1; } finally { 这些代码在return后执行 }
谢谢,试了一下,虽然执行了return,但还是没有返回,阻塞在了finally里面
  • 打赏
  • 举报
回复
这就好像一个人爱上了自己照镜子时看到的那个人头,痛恨自己长得丑,硬要奔走呼号砍掉自己的头颅,这就是把原本很简单的逻辑问题弄得非常神经质从而产生的编程设计问题。
  • 打赏
  • 举报
回复
这个设计模式不叫做“继续执行函数体”,函数体中只是注册了一个委托方法给定时器或者线程任务对象(它们将来会调用委托),然后函数该返回什么还是返回什么。所以这里根本不是“继续执行函数体”中概念。
以有涯求无涯 2018-01-10
  • 打赏
  • 举报
回复
用委托吧,肯定是要异步执行的
正怒月神 2018-01-10
  • 打赏
  • 举报
回复
那你别返回值了。 直接修改 外部变量的值。 但是不开线程,难道不会堵塞吗
threenewbee 2018-01-09
  • 打赏
  • 举报
回复
理论上有一种情况可以: try { throw new Exception(); } catch { return 1; } finally { 这些代码在return后执行 }
E次奥 2018-01-09
  • 打赏
  • 举报
回复
计时器在Tick中停止并调用DoSomething,在DoSomeThing返回的时候开始计时器! 当然计时器本身就是一个线程!
wanghui0380 2018-01-08
  • 打赏
  • 举报
回复
不开线程你有些开玩笑。如果你外面本身有线程无所谓。如果外面没有线程。你阻塞doSomething(),你的程序就被卡在这里了。so,你自己看应该如何。 那怕微软做的那些异步代码,本身都的是在线程里阻塞。
cheng2005 2018-01-08
  • 打赏
  • 举报
回复
你连自己想干什么都没想清楚,把你想干的事情再想想,最好在纸上画一画,你就不会描述的这么糊涂了。
syue126 2018-01-08
  • 打赏
  • 举报
回复
我就是想不开线程的情况下,保持doSomething()运行,还能有返回值
syue126 2018-01-08
  • 打赏
  • 举报
回复
返回之前 让timer start,在回调函数中执行doSomething即可。 ---------------------------------------- 您能否说具体一些,没太明白
在回忆里流浪 2018-01-08
  • 打赏
  • 举报
回复
多开了一个线程,会执行doSomething这个方法吧,Start()已经退出了,建议打个断点调试一下
exception92 2018-01-08
  • 打赏
  • 举报
回复
返回之前 让timer start,在回调函数中执行doSomething即可。
xuzuning 2018-01-08
  • 打赏
  • 举报
回复
不知道你在说什么 如果 doSomething(); 是持续运行,不返回的话 Start() 也就永远不会结束
exception92 2018-01-08
  • 打赏
  • 举报
回复
用定时器timer。

110,533

社区成员

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

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

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