枚举.NET集合时,MSDN声明:
只要集合保持不变,枚举器仍然有效.如果对集合进行了更改(例如添加,修改或删除元素),则枚举数将无法恢复,并且其行为未定义.
"无法恢复的无效"究竟是什么意思?
例如,使用二叉树,引用既可以向下也可以是向左和向右的子项,也可以是父对象.在这样的树中,对树中单个节点的单个引用足以在树中导航,因为您可以从中轻松找到树中的下一个节点.
所以使用那棵树,假设我删除了一些其他节点(可能是我不删除我当前所在的节点),我是否仍然使枚举器无效?请注意,我不是在谈论多线程操作,只是运行循环的单个线程,以及修改循环体内的集合.
这个"法律"真的是一个法律,即使调查员可以继续,也不应该这样吗?
初学者 android 程序员,我想在用户单击列表项时从字符串列表中添加和删除项目,但在尝试执行此操作时出现操作不支持错误。请参阅以下代码以了解我想要做什么。
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
if(myList != null)
{
StringBuilder stringBuilder = new StringBuilder();
if(myList.contains(mylist1.get(position).getPackageName()))
{
for(int i = 0; i < myList.size(); i++)
{
if(myList.get(i).equals(mylist1.get(position).getPackageName()))
continue;
if((myList.size() - 1) != i)
stringBuilder.append(myList.get(i)).append(separator);
else
stringBuilder.append(myList.get(i));
}
editor.putString("mypreference", stringBuilder.toString());
mylistt1.get(position).setDisabled(false);
//error happens in following
myList.remove(mylist1.get(position).getPackageName());
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是日志猫
04-08 11:33:00.030: ERROR/AndroidRuntime(533): FATAL EXCEPTION: main
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:638)
at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:75)
at java.util.AbstractCollection.remove(AbstractCollection.java:229)
at com.mypackage.myActivity.onListItemClick(myActivity.java:82)
at android.app.ListActivity$2.onItemClick(ListActivity.java:319)
at …Run Code Online (Sandbox Code Playgroud) android list arraylist invalidoperationexception listactivity
我有以下代码给我提出问题,我将不胜感激任何帮助:
private static string CreateOptionString(List<VehicleOption> Options)
{
StringBuilder returnValue = new StringBuilder();
foreach (VehicleOption option in Options)
{
if (option.OptionStatus == ExtendedResponse.OptionState.Included)
{
if (returnValue.Length > 0)
{
returnValue.Append(", ");
}
returnValue.Append(option.OptionName);
}
}
return returnValue.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我最初的问题是我得到了一个System.InvalidOperationException:我的foreach循环上的集合被修改了错误.
1)我仍然无法弄清楚为什么我会得到这个错误,因为我没有看到它被修改的任何地方.
有人建议我将List复制到一个新List并循环遍历新List.我做到了,它摆脱了InvalidOperationException.但是,我试着以不同的方式处理列表,并且两者都给了我一个System.ArgumentException:目标数组不够长.以下是我尝试复制列表的两种方法
List<VehicleOption> newOptions = new List<VehicleOption>(Options);
Run Code Online (Sandbox Code Playgroud)
和
List<VehicleOption> newOptions = new List<VehicleOption>();
newOptions.AddRange(Options);
Run Code Online (Sandbox Code Playgroud)
这两个都给了我一个System.ArgumentException:Destination数组不够长.
2)为什么这些方法中的任何一个都会给我这个例外?
任何帮助将不胜感激,因为我很难过.
谢谢!
我刚刚开始学习Windows应用程序开发,并且我们已经获得了自学项目来开发一个Windows应用程序.我正在尝试创建发送电子邮件的应用程序.我已经创建了一个类MsgSender.cs来处理它.当我从主窗体调用该类时,我收到以下错误
System.InvalidOperationException未处理.
错误消息 - >
跨线程操作无效:控制'pictureBox1'从其创建的线程以外的线程访问
堆栈跟踪如下:
System.InvalidOperationException was unhandled
Message=Cross-thread operation not valid: Control 'pictureBox1' accessed from a thread other than the thread it was created on.
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.Control.get_Handle()
at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.set_Visible(Boolean value)
at UltooApp.Form1.sendMethod() in D:\Ultoo Application\UltooApp\UltooApp\Form1.cs:line 32
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
Run Code Online (Sandbox Code Playgroud)
码:
private void btnSend_Click(object sender, EventArgs e)
{
pictureBox1.Visible = true;
count++; …Run Code Online (Sandbox Code Playgroud) 您好,我一直在网上搜索有关此问题的信息,但没有找到任何可以修复该问题的信息。
\n\n我想在主窗口加载时显示一个对话框,因此我为我的MainWindowLoaded 事件分配了一个事件处理程序。处理程序如下:
private void Window_Loaded(object sender, RoutedEventArgs e) {\n if (Settings.Instance.GetBool(ConfigFunctionalityGroup, "CheckForUpdatesOnStartup")) {\n worker = new BackgroundWorker();\n worker.DoWork += worker_DoWork;\n worker.ProgressChanged += worker_ProgressChanged;\n worker.WorkerReportsProgress = true;\n worker.RunWorkerAsync();\n }\n\n findandreplacedialog = new FindAndReplaceDialog() { Owner = this };\n\n Open_Environment_Click(null, null);\n}\nRun Code Online (Sandbox Code Playgroud)\n\nOpen_Environment_Click是菜单项的事件处理程序,编写如下:
private void Open_Environment_Click(object sender, RoutedEventArgs e) {\n SelectEnvironmentDialog dialog = new SelectEnvironmentDialog(Environments);\n\n if (dialog.ShowDialog().Value == true) {\n dialog.SelectedEnvironment.Open();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nShowDialog当我在 中调用对话框时发生异常Open_Environment_Click。
异常详情如下:
\n\n …我有一个任务,我正在重建我们为许多项目丢失的一些来源.最多,它已经很好了,但当然在最后一个项目中,我遇到了一个错误,我无法找到任何解决方案.
我使用Reflector 8.1反编译DLL,它给了我所有源代码和一堆.resources文件.我一直在使用resgen程序将它们转换回.resx文件以包含在项目中.一个档案让我感到悲伤.请帮忙.
>resgen foo.resources foo.resx
Read in 106 resources from "foo.resources"
ResGen : error RG0000: Error while writing the output file "Resources.resx"
ResGen : error RG0000: Specific exception: "InvalidOperationException" Message: "Item named 'IncomingRing' of type 'System.IO.PinnedBufferMemoryStream' cannot
be added to the resource file because it is not serializable."
Run Code Online (Sandbox Code Playgroud)
2个错误.
我创建了一个WPF应用程序,Entity framework 4.0.当我试图在PhoneNumber表中插入记录时,它成功地插入了第一条记录.但是,当我遍历一些List并尝试将另一个项插入PhoneNumber表时,它插入记录但显示错误为:
InvalidOperationException由用户代码处理:对数据库的更改已成功提交,但更新对象上下文时发生错误.ObjectContext可能处于不一致状态.内部异常消息:发生了引用完整性约束违规:定义引用约束的属性值在关系中的主体和从属对象之间不一致.
.cs文件中的代码:
protected void InsertContact(List<PhoneNumbersList> phoneList,otherparameters here)
{
Contact contact = new Contact();
PhoneNumber phnumber = new PhoneNumber();
//INSERT into Contacts Table
contact.PrefixTitleID = cfnm.PrefixTitleID;// cfnm.Title;
contact.FirstName = cfnm.FirstName;
contact.MiddleName = cfnm.MiddleName;
contact.LastName = cfnm.LastName;
contact.Website = webpageaddress;
contact.SuffixID = cfnm.SuffixID;
contact.Gender = gender;
contact.IMAddress = imaddress;
db.Contacts.Add(contact);
db.SaveChanges();
int contactid=contact.ContactID;
if (contactid > 0)
{
int phid = 0;
//INSERT into PhoneNumber Table
foreach (var ph in phoneList)
{
phnumber.PhoneTypeID …Run Code Online (Sandbox Code Playgroud) .net entity-framework invalidoperationexception foreign-key-relationship
读取多次与此错误相关的帖子并没有找到我的问题的解决方案后,我在这里解释.
我使用XmlSerializer来序列化简单类.
这是我的代码:
private void btnGenerateXml_Click(object sender, RoutedEventArgs e)
{
Orchard orchard = new Orchard
{
Recipe = new Recipe
{
Name = "Generated by JooWeb.Tools",
Author = "admin",
ExportUtc = DateTime.UtcNow
},
MyDatas = new MyDatas
{
//Test = "test"
TrendDatas = new TrendDatas
{
Id = null,
Status = "Published",
TrendDatasPart = new TrendDatasPart
{
IdSource = 0,
PostalCode = "1000",
Locality = "Test5",
Surface = (decimal)0.00,
Price = (decimal)0.00,
Type = "",
InsertDateIndicator = "",
UpdateDateIndicator = …Run Code Online (Sandbox Code Playgroud) c# xml xml-serialization invalidoperationexception xmlserializer
我正在使用第三方工具,在该工具中我收到了 InvalidOperationException(实际上,这最终发生在 PresentationFramework.dll 中):
调用线程无法访问此对象,因为其他线程拥有它。
我尝试了使用 Invoke 的任何变体,包括 BeginInvoke,但没有任何变化。
会话 session = new ThirdPartyTool.Session();
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => session.Open(view)));
使用 Google 时,我只找到建议使用 Invoke 的“解决方案”。好吧,我确实使用 Invoke。
其他问题及其在 stackoverflow 上的相应答案也无济于事。
我还能做些什么来追查真正的原因?
编辑:我再次查看了线程窗口,完整的调用堆栈位于主线程中。AFAIK,这表明调用是多余的。
Edit2:
在调用 open 时不会直接引发错误。ThirdPartyTool 初始化一个列表框,当测量这个列表框时,表示框架中发生错误:

实际异常被包装到 XamlParseException 中。完整的异常细节:
System.Windows.Markup.XamlParseException occurred
HResult=-2146233087
Message=The calling thread cannot access this object because a different thread owns it.
Source=PresentationFramework
LineNumber=0
LinePosition=0
StackTrace:
at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader, XamlObjectWriter currentWriter)
InnerException: System.InvalidOperationException
HResult=-2146233079
Message=The calling thread cannot access this object because a different thread owns it.
Source=WindowsBase
StackTrace: …Run Code Online (Sandbox Code Playgroud) 我有一个带有 EF Core 的 .net core 2.1 mvc 应用程序,其中我使用自动映射器将视图模型与域模型进行匹配。在我的编辑方法中,我收到错误:
InvalidOperationException:无法跟踪实体类型“Ticket”的实例,因为已跟踪具有相同键值 {'ID'} 的另一个实例。
这里的其他几个主题没有解决我的问题。
我的编辑方法:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, TicketViewModel ticketViewModel)
{
Ticket ticketToUpdate = await _unitOfWork.Ticket.Get(id); // I implement unit of work
// some logic for checks
// ...
if (ModelState.IsValid)
{
try
{
// mapping Ticket viewmodel to Ticket Domain Model
ticketViewModel = _mapper.Map<TicketViewModel>(ticketToUpdate);
// update some properties on viewmodel
_mapper.Map(ticketViewModel, ticketToUpdate); // doesn't map values.
_unitOfWork.Ticket.Update(ticketToUpdate); //No longer fails
await _unitOfWork.Commit();
}
catch (DbUpdateConcurrencyException)
{ …Run Code Online (Sandbox Code Playgroud) c# entity-framework invalidoperationexception automapper asp.net-core-mvc
c# ×7
.net ×2
list ×2
wpf ×2
android ×1
arraylist ×1
automapper ×1
collections ×1
enumeration ×1
foreach ×1
invoke ×1
listactivity ×1
reflector ×1
resgen ×1
resx ×1
showdialog ×1
xml ×1