【发布时间】:2016-12-02 22:22:55
【问题描述】:
对不起,我很困惑。我们有一个向一个硬件发送命令的过程,这个过程不堪重负。我创建了一个简单的解决方案,每发送 100 次后,它会暂停 1 秒,然后继续处理。在调试模式下运行,这完全解决了我们遇到的所有问题。但是,当我将此解决方案编译为 Release 版本时,我的计时器方法似乎永远卡住了。
在下面的代码中,我有一个简单的 while 循环,循环直到 bool 为真。 (我不想使用睡眠,因为我不希望线程变得无响应)
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;
}
任何人都可以看到在 Release 模式下运行时 while 循环无限卡住的原因吗?另外,如果有人对此有更好的解决方案,请告诉我。不过我必须使用 VS 2010。
感谢阅读。
【问题讨论】:
-
使
isWaitOver易变。 msdn.microsoft.com/en-us/library/x13ttww7.aspx -
您没有显示声明,但要使此代码可靠,isWaitOver 必须是易失的。是吗?
-
Thread.Sleep 是一个循环
标签: c# visual-studio-2010