一个小背景:我是一个WPF到WinForms的转换器,有一段时间我一直在迁移我的应用程序。
我被一个朋友报告说,我的代码在Windows XP(即它在启动时会产生堆栈溢出)无法正常工作,即使它在Windows 7(我开发的)上工作正常。
经过一番研究,造成这个问题的原因是这样的:
private void listView1_SelectedindexChanged(object sender,EventArgs e) { listView1.Selectedindices.Clear(); listView1.Items[0].Selected = true; }
现在我注意到了这个显然很糟糕的决定,我不知道为什么它不能在Windows XP上运行。 我想知道为什么它在Windows 7上工作 。
清单的supportedOS设置实际上在幕后做了什么?
如何在.net中获得可用的无线接入点及其信号强度?
如何在.net中为Windows服务设置ACL?
为什么打电话给PerformanceCounter很慢?
SymFromAddr使用C#
很显然,编译器在某个时候会计算出我正在做的事情,并且防止同一个事件被一次又一次地解雇,但是我宁愿让它不做任何事情,这样我就可以看到并且挤掉看不见的bug我正在开发的平台,而不是必须同时在两个平台下进行testing。 回到WPF我可以手动处理这种行为,通过设置e.Handled为'true',在WinForms显然没有这样的事情。
有没有这样的编译器标志?
简单的IParallelEnumerable <T>教程
MonthCalendar在不同的平台上(平台),更正:主题(XP vs Aero主题)
使用DLL .NET内部方法
Visual Basic:重新启动桌面Windowspipe理器(DWM)
尝试这个:
private void listView1_SelectedindexChanged(object sender,EventArgs e) { if (!listView1.Items[0].Selected) { listView1.Selectedindices.Clear(); listView1.Items[0].Selected = true; } }
你只想在第一个项目上选择一次。 问题是它可能进入永久循环。
至于为什么Windows 7比XP更宽容,我不能说。 可能是LVM_ *消息的处理顺序或其他。
检查并查看.NET版本是否有所作为。 如果您的Windows 7机器上的.NET版本比XP版本更高,那么即使您定位的是早期版本,也可能存在差异。
查看MSDN有关.NET向后兼容性的信息 。
这可能工作(未测试)
private void listView1_SelectedindexChanged(object sender,EventArgs e) { if(Environment.Osversion.Version.Major < 6) listview1.SelectedindexChanged -= new EventHandler(listView1_SelectedindexChanged); listView1.Selectedindices.Clear(); listView1.Items[0].Selected = true; if(Environment.Osversion.Version.Major < 6) listview1.SelectedindexChanged += new EventHandler(listView1_SelectedindexChanged); }
编辑看看它的操作系统特定:o
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。