1 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果我們了解這里發(fā)生的事情,希望這將幫助您弄清楚這一點(diǎn)。讓我們看看當(dāng)您進(jìn)入第 6003 個(gè)循環(huán)時(shí)會發(fā)生什么。我將假設(shè)progBarSelectInvoices.Value == 6002此時(shí):
這條線有什么作用?
progresbarValue = progBarSelectInvoices.Value++;
最后。progresbarValue == 6004和progBarSelectInvoices == 6003
progresbarValue 永遠(yuǎn)不會再次使用,所以它可能只是被丟棄,但不確定
然后我們跳過并做一堆其他的事情,然后點(diǎn)擊這條線:
progressCount = progBarSelectInvoices.Value;
在這里progressCount == 6003 ,然后我們這樣做:
if (progressCount++ == maxCount || progressCount==invoiceCount)
那么這里會發(fā)生什么,如果maxCount == 6004不是這個(gè)的第一部分 if 是falseBUT now progessCount == 6004。我們知道如果maxCount是 6004,那么invoiceCount == 6003(從這一行maxCount = invoiceRecord.Count + 1;),但現(xiàn)在progressCount == 6004這也是錯(cuò)誤的。這意味著我們執(zhí)行 else 部分。
progBarSelectInvoices.Value++;
progressCount= progBarSelectInvoices.Value++;
這是做什么的?嗯,在第一行我們遞增progBarSelectInvoices.Value,現(xiàn)在是 6004。然后我們移動到第二行,我們設(shè)置progressCount為 6004,但是我們再次遞增進(jìn)度條的值,所以現(xiàn)在是 6005。然后我們回到循環(huán)的頂部,我們做的第一件事是再次增加進(jìn)度條,這將我們帶到 6006。
就個(gè)人而言,我盡量避免在 if 語句中使用 pre 或 post 遞增語句,因?yàn)樗鼤勾a難以閱讀。在這種情況下,我絕對會建議不要這樣做。
如何修復(fù)
解決此問題的一種方法 - 如果您確定您只有 6004 條記錄,因此您只會執(zhí)行該 while 循環(huán) 6004 次,然后執(zhí)行此操作(注意,我建議您將增量移動到while 循環(huán),以便您在指示進(jìn)度之前實(shí)際完成工作)
while (invoiceRecord.MoveLast())
{
// All your other code here
progBarSelectInvoices.Value++;
如果您想確保不超過最大值,您可以添加一個(gè)快速檢查
while (invoiceRecord.MoveLast())
{
// All your other code here
if (progBarSelectInvoices.Value < progBarSelectInvoices.Maximum)
progBarSelectInvoices.Value++;
然后,您可以在檢查 maxCount 并重置進(jìn)度條或遞增它的循環(huán)結(jié)束時(shí)取消 if/else 業(yè)務(wù)。
旁注
從該行的存在Application.DoEvents()以及在增加進(jìn)度條值時(shí)您沒有收到異常的事實(shí),我偷偷懷疑您正在 UI 線程中執(zhí)行此循環(huán)。每當(dāng)您發(fā)現(xiàn)自己需要添加Application.DoEvents()事件處理程序代碼時(shí),這是問自己“如何將這項(xiàng)工作移出 UI 線程?”的好時(shí)機(jī)。打電話Application.DoEvents()幾乎從來都不是一個(gè)好主意??催@里和這里
您應(yīng)該將該代碼移動到后臺線程中。唯一要記住的是,您需要使用調(diào)用調(diào)用來更新進(jìn)度條值。
- 1 回答
- 0 關(guān)注
- 598 瀏覽
添加回答
舉報(bào)