Foxtable(狐表)用户栏目专家坐堂 → 无端端报错The given key was not present in the dictionary.


  共有4488人关注过本帖树形打印复制链接

主题:无端端报错The given key was not present in the dictionary.

帅哥哟,离线,有人找我吗?
chen3728060
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
无端端报错The given key was not present in the dictionary.  发帖心情 Post By:2016/8/17 17:02:00 [只看该作者]

.NET Framework 版本:2.0.50727.3662
Foxtable 版本:2016.6.26.1
错误所在事件:
详细错误信息:
The given key was not present in the dictionary.

 

搜索之前的帖子,有这个问题,但是没有答案,因为当时官方让发帖人给出代码,发帖人给不出。

 

今天我发这个问题,也一样是给不出代码。因为不知道是什么功能触发的,我只能描述一下我的情况。

 

这个代码是出现在我开发作为QQClient服务器的程序,代码是很少的,就是启动QQClient,与Dictionary有关的,只有2个变量,一个是自动编号用的,一个是独占编辑用的

 

Public CodeDic As New Dictionary(of String,Integer)'网络自动编号

Public MyEditDic As new Dictionary(of String,String)'独占编辑

 

但是我为啥我给不出具体的报错代码?

 

因为我这个服务器程序,已经运行了10多天,一直都没问题,各种登陆操作都完全没问题。就是今天突然出现了,没任何征兆。那我怎么发现的呢?就是我发现客户端一直都登陆不了,提示“规定时间内未取得服务器响应”,但是已经登陆进去的客户端,又可以正常使用,所以我看了一眼服务器,发现这个报错,我关闭这个错误以后,一个下午也没有再弹出过,真的无法发现问题在哪里。

 

目前唯一能做的就是把我的程序放上来,让官方看看。还要服务器端的代码不算太多。由于源程序需要连接我外部数据库,可能连接不了,所以也放出程序导出的代码

 

 

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:melanoserver.foxdb

 


 

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:eventcode.zip

[此贴子已经被作者于2016/8/17 17:03:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/17 17:11:00 [只看该作者]

 意思是 【给定的键在字典中不存在

 

 比如你字典里面 abc 这个键值,但是你用了如 MyEditDic("abc") 就会报错。

 

 你改一下代码

 

    Dim Key As String = msg.SubString(2,msg.Length - 4)
    If MyEditDic.Containskey(Key) = False Then '如果无人编辑此行
        MyEditDic.Add(Key,e.UserName) '登记申请者为此行的编辑者
        e.ReturnValue = "OK" '通知申请者可以编辑
    ElseIf MyEditDic.Containskey(Key) AndAlso MyEditDic(Key) = e.UserName Then '如果申请者就是之前登记的编辑者
        e.ReturnValue = "OK" '通知申请者可以编辑
    Else '如果之前登记的编辑者为其他人
        Dim dr As DataRow = DataTables("MUser").SQLFind("MUserID ='" & MyEditDic(Key) & "'")
        If dr Is Nothing Then
            e.ReturnValue ="用户" & MyEditDic(Key) & " 正在编辑!" & vbcrlf & vbcrlf & "您若想编辑,请通知他保存或退出"  '告知申请者是谁在编辑此行
        Else
            e.ReturnValue ="用户" &  MyEditDic(Key) & ":" & dr("MUserName") & " 正在编辑!" & vbcrlf & vbcrlf & "您若想编辑,请通知他保存或退出"  '告知申
        End If
    End If


 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
  发帖心情 Post By:2016/8/17 18:30:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看
在第一个if已经判断了是否有这个键,存在这个键才到下一步elseif,为啥还要重新判断?

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/17 18:39:00 [只看该作者]

 有可能有并发情况,特别是你有 MyEditDic.Remove(Key) 这句代码。

 

 某一时刻判断是存在的,但就在那个时候,修改了值,就可能导致冲突。


 回到顶部