第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

進(jìn)度條超過最大值

進(jìn)度條超過最大值

C#
長風(fēng)秋雁 2022-01-09 16:31:45
使用 ++ 操作遞增值時(shí),進(jìn)度條超過最大值。在下面的代碼中,我有一個(gè)大小為 6004 的記錄集,當(dāng)它繞過循環(huán)時(shí),它設(shè)法達(dá)到 6006,即使我已經(jīng)放置了一個(gè) if 語句來捕獲它,當(dāng)它達(dá)到 value++ 以將進(jìn)度條重置為零時(shí)隱藏面板。    invoiceRecord = (SageDataObject240.InvoiceRecord)_workSpace.CreateObject(Resources.InvoiceRecord);    pnlProgress.Visible = true;    progBarSelectInvoices.Value = 0;    progBarSelectInvoices.Maximum = invoiceRecord.Count;    List<EdiInvoice> selectedInvoices = new List<EdiInvoice>();    EdiInvoice invoice;    DateTime fromDate = chkEnableFromDatePicker.Checked ? dtpFrom.Value.Date : DateTime.MinValue;    DateTime toDate = chkEnableToDatePicker.Checked ? dtpTo.Value.Date : DateTime.MaxValue;    int invoiceCount = 0;    int progressCount = 0;  int progresbarValue = 0;              int maxCount = invoiceRecord.Count + 1;    while (invoiceRecord.MoveLast())    {        progresbarValue = progBarSelectInvoices.Value++;        bool isPosted = (SDOHelper.Read<sbyte>(invoiceRecord, Resources.POSTED_CODE) == 1);        if (isPosted)        {            int invoiceNo = SDOHelper.Read<int>(invoiceRecord, Resources.INVOICE_NUMBER);            string invoiceCustomerReference = SDOHelper.Read<string>(invoiceRecord, Resources.ACCOUNT_REF);            bool isValidCustomerReference = (invoiceCustomerReference == _selectedCustomer.Reference || _selectedCustomer.IncludeBranchInvoices && _selectedCustomer.BranchCodes.ContainsKey(invoiceCustomerReference));            sbyte invoiceTypeCode = SDOHelper.Read<sbyte>(invoiceRecord, Resources.INVOICE_TYPE_CODE);            bool isValidType = invoiceTypeCode >= 0 && invoiceTypeCode <= 5;            string notes1 = SDOHelper.Read<string>(invoiceRecord, "NOTES_1");            bool isExported = notes1.Length > 2 && notes1.Substring(0, 3).Equals("EDI", StringComparison.CurrentCultureIgnoreCase);            DateTime invoiceDate = SDOHelper.Read<DateTime>(invoiceRecord, "INVOICE_DATE");            bool isInDateRange = invoiceDate >= fromDate && invoiceDate <= toDate;
查看完整描述

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)度條值。


查看完整回答
反對 回復(fù) 2022-01-09
  • 1 回答
  • 0 關(guān)注
  • 598 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號