C# C、 foreach循环和thread.sleep外部的变量
我不能使用我在foreach循环中声明的变量,它在外部是'minute'和'hour',因此我在这三个方法中反复使用linq和foreach 因为这个线程,我不能继续使用我的程序,就像我不能点击其他按钮一样。睡眠,我能用什么来代替呢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 =
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正在制作一个计时器,让电脑在时间到来时关机、重启或发出警报,我实际上在这里问了同样的问题,但有人告诉我缩小我的问题范围,但这让它无法理解,请检查,很抱歉这个脑筋急转弯的问题: