我不能使用我在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");
}
答案 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())