Я исследовал эту проблему и еще не нашел того, что относится ко мне. Я не пытаюсь редактировать что-то, через что я зацикливаюсь.
************** 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()
Вот моя функция, которая его вызывает:
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;
}
}
Вот как я вызываю функцию:
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();
}
Пожалуйста, помогите мне!
ОБНОВЛЕНИЕ: Вот полный код.
Исключение
Смотрите в конце этого сообщения подробности о вызове
Отладка по времени (JIT) вместо этого диалогового окна.
************** 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;
}
}
Вот так выглядит мое закрытое событие в каждой форме.
internal static void CustomerInformationFormClosed(object sender, FormClosedEventArgs e)
{
clsGlobal.g_objfrmCustomerInformation = null;
PrepareImageBar();
}