C# C、 foreach循环和thread.sleep外部的变量

C# C、 foreach循环和thread.sleep外部的变量,c#,C#,我不能使用我在foreach循环中声明的变量,它在外部是'minute'和'hour',因此我在这三个方法中反复使用linq和foreach 因为这个线程,我不能继续使用我的程序,就像我不能点击其他按钮一样。睡眠,我能用什么来代替呢 XDocument xdoc = XDocument.Load("date.xml"); DateTime thisDate = DateTime.Now; int now; int operationTime; int neatTime; var date =

我不能使用我在foreach循环中声明的变量,它在外部是'minute'和'hour',因此我在这三个方法中反复使用linq和foreach

因为这个线程,我不能继续使用我的程序,就像我不能点击其他按钮一样。睡眠,我能用什么来代替呢

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");
    }

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");
}

然后,可以通过调用startRoutinePausewhilestillRunning调用此方法。如果在循环外声明变量,则可以在循环外使用变量。 例如:

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

你说我不能使用我在foreach循环中声明的变量是什么意思。您想在哪里使用它们?为什么要在循环中调用shutdown命令…因此多次调用它如果您试图获取总秒数,可以避免进行数学运算,并执行如下操作:now=intthisDate.TimeOfDay.TotalSeconds;和操作时间=初始项时间天数总秒数;与只休眠一秒钟并递减一个变量的while循环不同,您还可以删除该循环并执行以下操作:Thread.SleepneatTime*1000;而且您的外部foreach循环也不是必需的,因为在第一次迭代之后,您重新启动了机器。你到底想做什么?这里的大局是什么?好的,谢谢,我已经完成了,如何结束这个问题?Big picture正在制作一个计时器,让电脑在时间到来时关机、重启或发出警报,我实际上在这里问了同样的问题,但有人告诉我缩小我的问题范围,但这让它无法理解,请检查,很抱歉这个脑筋急转弯的问题: