C#,foreach循环和thread.sleep之外的变量

时间:2018-04-18 23:53:03

标签: c#

我不能使用我在foreach循环中声明的变量,它是“分钟”。和'小时'从外面来看,这让我一遍又一遍地使用这三种方法中的linq和foreach。

我无法继续使用我的程序,因为我无法点击其他按钮和东西,因为这个Thread.Sleep,我可以使用什么呢?

XDocument xdoc = XDocument.Load("date.xml");
DateTime thisDate = DateTime.Now;

int now;
int operationTime;
int neatTime;

var date = from i in xdoc.Descendants("date")
    select new
        {
            Hour = i.Element("hour").Value,
            Minute = i.Element("minute").Value,
        };

foreach (var item in date)
    {
        int hour = Convert.ToInt32(item.Hour);
        int minute = Convert.ToInt32(item.Minute);
        now = (thisDate.Hour * 3600) + (thisDate.Minute * 60);
        operationTime = (hour * 3600) + (minute * 60);
        if (operationTime < now)
        {
            neatTime = (24 * 3600) - (now - operationTime);
        }
        else
        {
            neatTime = operationTime - now;
        }
        while (neatTime > 0)
        {
            neatTime--;
            Thread.Sleep(1000);
        }
        Process.Start("shutdown", "/s /t 0");
    }

2 个答案:

答案 0 :(得分:1)

如果在循环外声明变量,则可以使用循环中的变量。 例如:

int count = 0;
for(int i =1; i<=10; i++)
    count++;
console.writeLine(count) // print 10

答案 1 :(得分:0)

Re:无法在foreach循环中使用变量 - 您正在寻找的是一个全局变量,以便在整个脚本的其余部分使用它。您可以在循环外声明变量并在其中分配值:

XDocument xdoc = XDocument.Load("date.xml");
DateTime thisDate = DateTime.Now;

int now;
int operationTime;
int neatTime;
int hour;
int minute;

var date = from i in xdoc.Descendants("date")
    select new
        {
            Hour = i.Element("hour").Value,
            Minute = i.Element("minute").Value,
        };

foreach (var item in date)
    {
        hour = Convert.ToInt32(item.Hour);
        minute = Convert.ToInt32(item.Minute);

        //Rest of code here
    }

Re:不使用Thread.Sleep() - 您可以使用IENumerator方法。此方法将在原始线程继续运行的同时运行,例如

public IEnumerator PauseWhileStillRunning()
{
    yield return new WaitForSeconds(1);
    Process.Start("shutdown", "/s /t 0");
}

然后,您可以通过调用StartCoroutine(PauseWhileStillRunning())

来调用此方法