對不起,但我很困惑。我們有一個將命令發送到一個硬件的進程,它會被淹沒。我創建了一個簡單的解決方案,每完成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