先上代码public bool Start()
        {
            if (bTrue)
            {
                    doSomething();
                    //Thread t = new Thread(doSomething);
                    //t.Start();
                    return true;
             }
             else 
             {
                  return false;
             }           
        }这是我写的动态链接库里的一个方法,要求有一个bool类型的返回值。问题是doSomething()是需要一直持续运行的,只要开始运行就可以返回True值了,但是如果返回值,函数体就运行结束了。如果采用注释掉的代码,用多线程的方法是可以实现的,但我不希望这样解决。请问高手有没有什么其他的方式解决。

解决方案 »

  1.   

    用定时器timer。
      

  2.   

    返回之前 让timer start,在回调函数中执行doSomething即可。
      

  3.   

    多开了一个线程,会执行doSomething这个方法吧,Start()已经退出了,建议打个断点调试一下
      

  4.   

    不知道你在说什么
    如果 doSomething(); 是持续运行,不返回的话 Start() 也就永远不会结束
      

  5.   

    我就是想不开线程的情况下,保持doSomething()运行,还能有返回值
      

  6.   

    返回之前 让timer start,在回调函数中执行doSomething即可。 
    ---------------------------------------- 您能否说具体一些,没太明白
      

  7.   

    不开线程你有些开玩笑。如果你外面本身有线程无所谓。如果外面没有线程。你阻塞doSomething(),你的程序就被卡在这里了。so,你自己看应该如何。那怕微软做的那些异步代码,本身都的是在线程里阻塞。
      

  8.   

    计时器在Tick中停止并调用DoSomething,在DoSomeThing返回的时候开始计时器! 当然计时器本身就是一个线程!
      

  9.   

    理论上有一种情况可以:
    try
    {
    throw new Exception();
    }
    catch
    {
    return 1;
    }
    finally
    {
    这些代码在return后执行
    }
      

  10.   


    谢谢,试了一下,虽然执行了return,但还是没有返回,阻塞在了finally里面
      

  11.   

    在同一个线程里面执行是不可能的,因为这个线程在返回之后,是没有断点的。不可能返回到你的循环内部的。
    如果确实需要在同一个线程内部做, 可以使用 Fiber 来做。
    我在使用类似 EnumWindows 这样的函数时候,又需要使用 foreach 来枚举的时候,就是这样的。
    此时的断点在++iterator 的地方。
    当需要枚举下一个时候,切换进纤程执行。