标签: invalidoperationexception

枚举集合,然后修改它,抛出异常的先例是什么?

枚举.NET集合时,MSDN声明:

只要集合保持不变,枚举器仍然有效.如果对集合进行了更改(例如添加,修改或删除元素),则枚举数将无法恢复,并且其行为未定义.

"无法恢复的无效"究竟是什么意思?

例如,使用二叉树,引用既可以向下也可以是向左和向右的子项,也可以是父对象.在这样的树中,对树中单个节点的单个引用足以在树中导航,因为您可以从中轻松找到树中的下一个节点.

所以使用那棵树,假设我删除了一些其他节点(可能是我不删除我当前所在的节点),我是否仍然使枚举器无效?请注意,我不是在谈论多线程操作,只是运行循环的单个线程,以及修改循环体内的集合.

这个"法律"真的是一个法律,即使调查员可以继续,也不应该这样吗?

.net collections enumeration invalidoperationexception

2
推荐指数
1
解决办法
173
查看次数

从 List<String> 添加或删除时不支持获取操作?

初学者 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

2
推荐指数
1
解决办法
2145
查看次数

Foreach循环遍历列表的错误

我有以下代码给我提出问题,我将不胜感激任何帮助:

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)为什么这些方法中的任何一个都会给我这个例外?

任何帮助将不胜感激,因为我很难过.

谢谢!

c# foreach list invalidoperationexception argumentexception

2
推荐指数
1
解决办法
1039
查看次数

收到错误 - System.InvalidOperationException未处理

我刚刚开始学习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)

c# multithreading invalidoperationexception

2
推荐指数
1
解决办法
9990
查看次数

Window.Loaded - ShowDialog() - 无法执行操作

描述

\n\n

您好,我一直在网上搜索有关此问题的信息,但没有找到任何可以修复该问题的信息。

\n\n

我想在主窗口加载时显示一个对话框,因此我为我的MainWindowLoaded 事件分配了一个事件处理程序。处理程序如下:

\n\n
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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

Open_Environment_Click是菜单项的事件处理程序,编写如下:

\n\n
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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

例外

\n\n

ShowDialog当我在 中调用对话框时发生异常Open_Environment_Click

\n\n

异常详情如下:

\n\n …

c# wpf invalidoperationexception showdialog

2
推荐指数
1
解决办法
5436
查看次数

将资源文件转换为resx - 不可序列化

我有一个任务,我正在重建我们为许多项目丢失的一些来源.最多,它已经很好了,但当然在最后一个项目中,我遇到了一个错误,我无法找到任何解决方案.

我使用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个错误.

c# reflector resx invalidoperationexception resgen

2
推荐指数
1
解决办法
3502
查看次数

错误:.net中的db.SaveChanges()发生参照完整性约束违规?

我创建了一个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

2
推荐指数
1
解决办法
5020
查看次数

InvalidOperationException错误反映类

读取多次与此错误相关的帖子并没有找到我的问题的解决方案后,我在这里解释.

我使用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

2
推荐指数
1
解决办法
4355
查看次数

调用线程无法访问此对象,因为其他线程拥有它

我正在使用第三方工具,在该工具中我收到了 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)

c# wpf invoke invalidoperationexception

1
推荐指数
1
解决办法
5930
查看次数

由于另一个具有相同 ID 错误的实例,无法跟踪该类型的实例

我有一个带有 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

1
推荐指数
1
解决办法
2182
查看次数