C# - System.InvalidOperationException: die Auflistung wurde geändert; der Enumerationsvorgang kann nicht ausgeführt werden

Ich habe recherchiert das Problem und nicht das gefunden, was betrifft mich das noch nicht. Ich bin nicht versucht zu Bearbeiten, etwas, was ich bin Durchlaufen.

************** Exception Text **************
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.Collections.Generic.List`1.Enumerator.MoveNext()

Hier ist meine Funktion, was es ist:

internal static bool CloseAllForms()
{
    try
    {
        if (clsGlobal.g_objfrmCustomerInformation != null)
            clsGlobal.g_objfrmCustomerInformation.Close();
        if (clsGlobal.g_objfrmSearchCustomer != null)
            clsGlobal.g_objfrmSearchCustomer.Close();

        if (clsGlobal.g_objfrmSwipeLicense != null)
            clsGlobal.g_objfrmSwipeLicense.Close();

        if (clsGlobal.g_objfrmSearchResults != null)
            clsGlobal.g_objfrmSearchResults.Close();

        if (clsGlobal.g_objfrmCustomerData != null)
            clsGlobal.g_objfrmCustomerData.Close();
        if (clsGlobal.g_objfrmPurchaseOrder != null)
            clsGlobal.g_objfrmPurchaseOrder.Close();
        if (clsGlobal.g_objfrmAddPurchaseOrderItem != null)
            clsGlobal.g_objfrmAddPurchaseOrderItem.Close();
        if ((clsGlobal.g_objfrmCustomerInformation == null) && (clsGlobal.g_objfrmSearchCustomer == null) && (clsGlobal.g_objfrmSwipeLicense == null) && (clsGlobal.g_objfrmSearchResults == null) && (clsGlobal.g_objfrmCustomerData == null) && (clsGlobal.g_objfrmPurchaseOrder == null) && (clsGlobal.g_objfrmAddPurchaseOrderItem == null))
        {
            PrepareImageBar();
            return true;
        }
        else
        {
            PrepareImageBar();
            return false;
        }
    }
    catch (Exception ex)
    {
        string ErrorMessage;

        ErrorMessage = "Error: " + ex.Message +
           "\r\nSource: " + ex.Source +
           "\r\nTargetSite: " + ex.TargetSite.ToString() +
           "\r\nStackTrace: " + ex.StackTrace.ToString();

        if (ex.Data.Count > 0)
        {
            ErrorMessage += "\r\nData Count: " + ex.Data.Count.ToString() +
                "\r\nKeys: " + ex.Data.Keys.ToString() +
                "\r\nValues: " + ex.Data.Values.ToString();
        }

        MessageBox.Show(ErrorMessage, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
        CustomFunctions.emailExceptionToAuthor(ex);

        return false;
    }
}

Dies ist, wie ich die Funktion aufrufen:

if (CloseAllForms())
{
    if (clsGlobal.g_objfrmPurchaseOrder == null)
    {
        clsGlobal.g_objfrmPurchaseOrder = new frmPurchaseOrder();

        clsGlobal.g_objfrmPurchaseOrder.FormClosed += PurchaseOrderFormClosed;
        clsGlobal.g_objfrmPurchaseOrder.MdiParent = clsGlobal.g_objfrmMDIMain;
        clsGlobal.g_objfrmPurchaseOrder.Show();
        clsGlobal.g_objfrmPurchaseOrder.BringToFront();
    }
    else
    {
        clsGlobal.g_objfrmPurchaseOrder.Show();
        clsGlobal.g_objfrmPurchaseOrder.BringToFront();
    }

    PrepareImageBar();
}

Bitte helfen Sie mir!

UPDATE: Hier ist der vollständige code.

Ausnahme
Finden Sie am Ende dieser Nachricht Informationen über das aufrufen
just-in-time (JIT) Debuggen anstelle dieses Dialogfelds.

************** Exception Text **************
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.Collections.Generic.List`1.Enumerator.MoveNext()
at Microsoft.VisualBasic.PowerPacks.ShapeCollection.Dispose(Boolean disposing)
at Microsoft.VisualBasic.PowerPacks.ShapeContainer.Dispose(Boolean disposing)
at System.ComponentModel.Component.Dispose()
at System.Windows.Forms.Control.Dispose(Boolean disposing)
at System.Windows.Forms.Form.Dispose(Boolean disposing)
at B2HD_Software.frmCustomerData.Dispose(Boolean disposing)
at System.Windows.Forms.Form.WmClose(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

PrepareImageBar();

internal static void PrepareImageBar()
{
clsGlobal.g_objfrmMDIMain.mnuImageBarAddCustomer.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarAddCustomer.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarEditCustomer.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarEditCustomer.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarFindCustomer.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarFindCustomer.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarStartSearch.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarStartSearch.Enabled = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarSwipeLicense.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarSwipeLicense.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarViewNotes.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarViewNotes.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarNewPurchase.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarNewPurchase.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarAddItem.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarAddItem.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarModifyItem.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarModifyItem.Enabled = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarDeleteItem.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarDeleteItem.Enabled = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarTakePicture.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarTakePicture.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarSavePicture.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarSavePicture.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarSave.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarSave.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarCancel.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarCancel.Enabled = true;
clsGlobal.g_objfrmMDIMain.mnuImageBarAdmin.Visible = false;
clsGlobal.g_objfrmMDIMain.mnuImageBarAdmin.Enabled = true;

switch (clsGlobal.ActiveForm())
{
    case "CustomerInformation":
        clsGlobal.g_objfrmMDIMain.mnuImageBarTakePicture.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarSave.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarCancel.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarCancel.Enabled = true;

        break;
    case "SearchCustomer":
        clsGlobal.g_objfrmMDIMain.mnuImageBarStartSearch.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarSwipeLicense.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarCancel.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarStartSearch.Enabled = false;

        break;
    case "SwipeLicense":
        clsGlobal.g_objfrmMDIMain.mnuImageBarCancel.Visible = true;

        break;
    case "CustomerData":
        clsGlobal.g_objfrmMDIMain.mnuImageBarCancel.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarViewNotes.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarNewPurchase.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarEditCustomer.Visible = true;

        break;
    case "PurchaseOrder":
        clsGlobal.g_objfrmMDIMain.mnuImageBarCancel.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarAddItem.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarDeleteItem.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarModifyItem.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarEditCustomer.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarViewNotes.Visible = true;

        clsGlobal.g_objfrmPurchaseOrder.ShowProperButtons();

        break;
    case "AddPurchaseOrderItem":
        clsGlobal.g_objfrmMDIMain.mnuImageBarTakePicture.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarSave.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarCancel.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarViewNotes.Visible = true;

        break;

    default:
        clsGlobal.g_objfrmMDIMain.mnuImageBarAddCustomer.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarFindCustomer.Visible = true;
        clsGlobal.g_objfrmMDIMain.mnuImageBarSwipeLicense.Visible = true;

        break;
}
}

CloseAllForms()

internal static bool CloseAllForms()
{
if (clsGlobal.g_objfrmCustomerInformation != null)
    clsGlobal.g_objfrmCustomerInformation.Close();

if (clsGlobal.g_objfrmSearchCustomer != null)
    clsGlobal.g_objfrmSearchCustomer.Close();

if (clsGlobal.g_objfrmSwipeLicense != null)
    clsGlobal.g_objfrmSwipeLicense.Close();

if (clsGlobal.g_objfrmSearchResults != null)
    clsGlobal.g_objfrmSearchResults.Close();

if (clsGlobal.g_objfrmCustomerData != null)
    clsGlobal.g_objfrmCustomerData.Close();

if (clsGlobal.g_objfrmPurchaseOrder != null)
    clsGlobal.g_objfrmPurchaseOrder.Close();

if (clsGlobal.g_objfrmAddPurchaseOrderItem != null)
    clsGlobal.g_objfrmAddPurchaseOrderItem.Close();

if ((clsGlobal.g_objfrmCustomerInformation == null) && (clsGlobal.g_objfrmSearchCustomer == null) && (clsGlobal.g_objfrmSwipeLicense == null) && (clsGlobal.g_objfrmSearchResults == null) && (clsGlobal.g_objfrmCustomerData == null) && (clsGlobal.g_objfrmPurchaseOrder == null) && (clsGlobal.g_objfrmAddPurchaseOrderItem == null))
{
    PrepareImageBar();
    return true;
}
else
{
    PrepareImageBar();
    return false;
}

}

Dies ist, was mein close-Ereignis sieht aus wie auf jedem Formular.

internal static void CustomerInformationFormClosed(object sender, FormClosedEventArgs e)
    {
        clsGlobal.g_objfrmCustomerInformation = null;

        PrepareImageBar();
    }
Können Sie eine volle stack-trace? Wissen Sie, wo der code nicht funktioniert (vielleicht etwas in PrepareImageBar vielleicht?
welche Plattform? (Rapfen? silverlight? wpf? Konsole? etc.)
Es gibt einige code hier fehlt; wahrscheinlich hat foreach Loop-Schleife über eine Liste, und irgendwo in der foreach Schleife, die Sie versuchen, hinzufügen oder entfernen Sie ein Element in der Sammlung.
+1 auf @vcsjones Kommentar, wahrscheinlich sind Sie das ändern einer Sammlung während einer Schleife durch die es entweder auf dem gleichen oder einem anderen thread.
Entfernen Sie die try-und catch, es wird verhindert, dass Sie sehen, wo der code wirklich Bomben. Lassen Sie es aus. Verwenden AppDomain.UnhandledException statt.

InformationsquelleAutor Brandon | 2011-07-14

Schreibe einen Kommentar