对不起,但我很困惑。我们有一个将命令发送到一个硬件的进程,它会被淹没。我创建了一个简单的解决方案,每完成100次发送,它就会暂停1秒,然后继续处理。以调试模式运行,这完全解决了我们遇到的所有问题。但是,当我将这个解决方案编译成Release版本时,我的计时器方法似乎永远停滞不前。发布版本的运行方式与调试版本不同
在下面的代码中,我有一个简单的while循环,循环直到bool为true。 (我不想使用睡眠,因为我不想让线程变得反应迟钝做)
foreach (DataRow row in ds.Tables[0].Rows)
{
string Badge = Database.GetString(row, "Badge");
if (Badge.Length > 0)
{
if(Count < Controller.MaximumBadges)
{
if (processed == 100) // Every 100 downloads, pause for a second
{
processed = 0;
StartTimer();
while (!isWaitOver)
{
}
Controller.PostRecordsDownloadedOf("Badges", Count);
}
if (Download(Badge, false))
{
Count++;
processed++;
}
}
else
Discarded++;
}
TotalCount++;
}
private void StartTimer()
{
// Create a timer with a one second interval.
aTimer = new System.Timers.Timer(1000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
isWaitOver = false;
}
private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
isWaitOver = true;
aTimer.Enabled = false;
}
任何人都可以看到一个原因,在发行模式下运行时,while循环会无限地被卡住?此外,如果有人看到更好的解决方案,请让我知道。但我必须使用VS 2010。
感谢您的阅读。
make'isWaitOver' volitile。 https://msdn.microsoft.com/en-us/library/x13ttww7.aspx – flakes
您不显示声明,但为了使此代码可靠,isWaitOver必须是易失性的。是吗? –
Thread.Sleep是作为一个循环 – NtFreX