1

这有点混乱,对此感到抱歉,

我是 C# 新手,所以我的问题可能很愚蠢,再次对此感到抱歉。

我想要完成的是这样的:

            private void RivalAlive()
        // The Function Should be alive for 10min - if the condition is performed then the function need to die (quit) immediately, also if the 10min has passed without the condition beeing performed the function will die.
        {
            if (SmallHour == 5) // if condition is performed it need to execute the code in the condition and quit the function
            //Run Another Function Here
            //End the RivalAlive Function
        {
        }
            //If the Condition is False - keep with the loop every 1 sec till 10min has passed
        }

多谢!

4

2 回答 2

2

考虑到您只想在接下来的 10 分钟内轮询 SmallHour 的值,函数如下:

private void RivalAlive()
{
    DateTime S = DateTime.Now;

    while(DateTime.Now.Subtract(S).TotalSeconds < 600 && SmallHour !=5)
         System.Threading.Thread.Sleep(1000);

    if(SmallHour == 5)
         EnterYourFunction();
}

此函数将在接下来的 10 分钟内每隔一秒检查一次 SmallHour 的值。如果值为 5,它将退出。否则10分钟后会自动退出。

于 2013-04-27T17:19:23.857 回答
2

将 while 循环持续运行十分钟是不正确的,您应该实施观察者模式以避免不必要的处理器周期。

一些对象正在跟踪“SmallHour”并对其进行更新。该对象将是一个 Observable 对象,并且所有其他对象都将注册,以便它们可以接收有关更新的信息。在您的情况下, Observer 是包含 RivalAlive() 方法的对象。当可观察对象更新“SmallHour”时,它将通知他列表中的所有观察者。一旦 Observer 完成了它的工作,它就可以从 Observable 中注销并“死亡”,或者你想到的任何逻辑。

我希望这就是你要找的。

查看谷歌上的观察者模式。 http://msdn.microsoft.com/en-us/library/ee817669.aspx (可能有比这个链接更好的例子)

编辑:我忘记了它只需要检查十分钟的条件。它可以存储开始监听变化的时间。一旦它收到 SmallHour 的更新,它就可以检查是否已经过了十分钟并采取相应的行动。

于 2013-04-27T17:29:30.157 回答