相关疑难解决方法(0)

尝试读取或写入受保护的内存.这通常表明其他内存已损坏

我希望有人可以告诉我可能导致此错误的原因:

尝试读取或写入受保护的内存.这通常表明其他内存已损坏.

我不能真正发布代码,因为这个错误似乎被抛出应用程序的任何随机区域.应用程序将在抛出错误之前的12-48小时内运行.有时它会在一个看似随机的位置停止并抛出上述错误,其他时候整个应用程序停止并且我得到一个错误的屏幕,上面写着"有一个致命的错误...这可能是一个CLR中的错误或......"关于PInvoke或其他非相关信息的内容.发生这种情况时,所有线程都显示终止,并且没有可用的调试信息.

简而言之,这就是应用程序的作用:

它是一个完全用C#编写的多线程服务器应用程序.客户端通过套接字连接到服务器.服务器为客户端运行虚拟"环境",以便他们可以相互交互并与环境进行交互.它消耗了相当多的内存,但我没有看到它泄漏.它通常消耗大约1.5GB.我认为它没有泄漏,因为内存使用在应用程序运行的整个时间内保持相对稳定.即使客户端没有做任何事情,它也会不断运行代码来维护环境.它不使用第三方软件或其他API.此应用程序使用的唯一外部资源是套接字连接和SQL数据库连接.它运行在64位服务器上.我尝试使用.net 2.0,3.5和4在VS2008和VS2010中进行调试.

我试过关闭编译器优化和几个微软热修复.似乎没有什么能让这个问题消失.如果有人知道任何可能的原因,或某种方式来确定导致问题的原因,将不胜感激.

.net c# multithreading memory-management

124
推荐指数
11
解决办法
29万
查看次数

ComboBox区分大小写的下拉列表

我有一个DropDown类型的ComboBox控件,其中包含"AAA","Aaa","Aa +"等项目.

问题是:如果我键入Aaa,项目"AAA"突出显示为选中,而不是"Aaa".我假设组合框使用FindString来查找SelectedItem - 因此搜索结果等同于第一个匹配的项目不区分大小写的字符串.StartsWith.

我需要更改什么才能覆盖此行为?

我需要能够输入ComboBox.

我是否可以覆盖winforms中的方法或类似于来自sll的答案的WPF IsTextSearchCaseSensitive属性的某种属性?

c# winforms

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

如何防止下拉组合框中的自动选择(精确匹配除外)?

我有一个组合框,它是与包含数据库中的行的数据网格相关的详细信息显示的一部分。不存在对组合框的绑定,我正在手动执行此操作。组合框允许手动输入,就像它是一个文本字段一样,同时仍然提供下拉选项。

我的问题是,如果我在字段中手动输入文本,并且单击下拉菜单,则组合框显然想要寻找匹配项。另外,看起来搜索很简单,因此KG匹配KG/Day。我必须避免这种情况并强制进行精确匹配。

但更进一步,我认为我需要能够自己管理整个过程,因为让事情变得更加复杂的是,下拉项实际上会显示为KG/Day - kilograms/day。然而,从中获取数据的数据库字段仅存储连字符之前的部分,因此KG/Day

因此,我需要以允许我做两件事的方式拦截下拉操作:

1)执行我自己的搜索以查找我是否有临时文本或“真实”匹配。因为它最初是从下拉列表中选择的;换句话说,我有KG/Day,而不仅仅是KG

2)消除ComboBox想要做的自动搜索行为。

我尝试使用表单中的方法处理程序来解决这些问题,例如

ComboBox::DropDown() 和 ComboBox::DropDownClosed(),

但似乎这些仍然不允许我停止基本的 ComboBox 搜索/匹配。

我也尝试创建一个从 ComboBox 继承的我自己的类,但我真的不知道要重写什么,或者一般如何去获得我想要的东西,停止我不想要的东西。

因此,我感谢您的建议。

编辑:扩展我已经尝试过的内容...在我继承的类中,我试图使用覆盖WndProc。根据我在另一个论坛中找到的一些建议,我的目标是拦截 ComboBox 消息LB_FINDSTRING并将其替换为LB_FINDSTRINGEXACT. 该帖子建议 ComboBox 默认为LB_FiNDSTRING,这符合我所看到的效果,并且替换LB_FINDSTRINGEXACT可以解决问题。问题是,除非我对 的定义有错误LB_FINDSTRING,否则它永远不会被收到。

这是我的枚举:

[Flags]
public enum ListBoxFlags
{
    LB_ADDSTRING = 0x0180,
    LB_SETSEL = 0x0185,
    LB_GETSELITEMS = 0x0191,
    LB_GETSELCOUNT = 0x0190,
    LB_GETCURSEL = 0x0188,
    LB_SELECTSTRING = 0x018C,
    LB_SETCURSEL = 0x0186,
    LB_FINDSTRING = 0x018F, …
Run Code Online (Sandbox Code Playgroud)

c# combobox

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