微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这个代码在Windows 7上工作,但不在Windows XP上?

一个小背景:我是一个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主题

C# – 使用File.WriteallLines

使用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] 举报,一经查实,本站将立刻删除。

相关推荐