InvalidOperationException: 集合已修改;可能无法执行枚举操作
来源:互联网 发布:安畅网络工作怎么样 编辑:程序博客网 时间:2024/05/21 12:44
遍历hashtable同时修改value时异常处理:
InvalidOperationException是当方法调用对于对象的当前状态无效时引发的异常。
一般如果调用方法失败不是由无效参数造成的,则使用 InvalidOperationException。(如果方法调用失
败是由无效参数造成的,则应改为引发 ArgumentException 或其派生类 ArgumentNullException 或
ArgumentOutOfRangeException。)
例如
如果创建枚举数后修改了集合中的对象,则由 MoveNext 引发该异常。//我的就是这种情况
如果执行方法调用前关闭了资源集,则由 GetString 引发该异常。
LdfldaMicrosoft 中间语言 (MSIL) 指令引发 InvalidOperationException。
我的程序中用到了异步和多线程,异常只有在不调试执行的情况下出现(调试不出现),而且只是在第一次执
行出现其他时候偶尔出现,这样最终也没有找到好的解决办法,开始只是把异常屏蔽掉。
最终还是不知道为什么hashtable不能在遍历是时候修改(不知道是不是因为处于线程安全的考虑),不过可以找到方法不在遍历的时候修改hashtable:把keys copyto 到一个Array然后通过遍历Array达到修改hashtable中value的目的代码如下:
- int count=this.hash_clients.Count ;
- string[] keys = new string[count];
- this.hash_clients.Keys.CopyTo(keys,0);
- foreach (string client in keys)
- {
- socketclient = (Socket)this.hash_clients [client];
- socketclient.Close();
- }
出现异常的代码段:
- Socket socketclient;
- //遍历hashtable
- if (this.hash_clients.Count > 0)
- {
- try
- {
- foreach (System.Collections.DictionaryEntry objDE in this.hash_clients)//异常出现处
- {
- socketclient = (Socket)objDE.Value;
- socketclient.Close();
- }
- }
- catch (Exception moveException)
- {
- //throw moveException;
- throw new Exception("客户端终端异常!!");
- }
- hash_clients.Clear();
************** 异常文本 **************
System.InvalidOperationException: 集合已修改;可能无法执行枚举操作。
在 System.Collections.Hashtable.HashtableEnumerator.MoveNext()
在 Network.SocketHelp.Stop() 位置 E:/项目开发程序/SD_TcpServer1.1
/Network/Network/SocketHelp.cs:行号 130
在 SD_TcpServer1._0.SD_Tcp_RemoteControlServer.allStop_Click(Object sender, EventArgs e)
位置 E:/项目开发程序/SD_TcpServer1.1/SD_TcpServer1.0/SD_Tcp_RemoteControlServer.cs:行号 92
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam,
IntPtr lparam)
- InvalidOperationException: 集合已修改;可能无法执行枚举操作
- System.InvalidOperationException: 集合已修改;可能无法执行枚举操作。
- 集合已修改;可能无法执行枚举操作。
- 集合已修改;枚举操作可能无法执行
- 集合已修改,枚举操作可能无法执行
- 集合已修改;枚举操作可能无法执行。
- 集合已修改;可能无法执行枚举操作
- 集合已修改;可能无法执行枚举操作。
- C#--集合已修改;可能无法执行枚举操作。
- 读书札记: “集合已修改;可能无法执行枚举操作。”
- C# 集合已修改;可能无法执行枚举操作
- 集合已修改;可能无法执行枚举操作。
- 集合已修改;可能无法执行枚举操作。
- WPF集合已修改;可能无法执行枚举操作 解决方案
- 集合已修改;可能无法执行枚举操作
- 【C#】集合已修改;可能无法执行枚举操作。
- 多线程下的for循环和foreach循环 System.InvalidOperationException: 集合已修改;可能无法执行枚举
- 怎么回事儿?C#错误:集合已修改;枚举操作可能无法执行。
- 剪贴板大观园(一): 剪贴板数据拷贝版
- PfAddStatDura: overflow
- C和C++语言学习总结(资料来自 林锐博士 2001 年7 月24) (收藏)
- JavaScript系列――还是异步?
- 剪贴板大观园(二): 剪贴板间谍(ClipSpy)
- InvalidOperationException: 集合已修改;可能无法执行枚举操作
- 查询IP对应地区的WebService
- datagrid数据导出到excel文件给客户端下载的几种方法 (LoveCherry)
- IE6,IE7,FF自适应高度
- 2008年度个人总结
- 使用 HttpRequest.Filter 来过滤或转换 Http 输入流
- [转贴]SQL2000/2005自动生成数据字典
- 广州软件行业协会专家数据库系统项目积累
- DataList分页(仿GOOGLE)