在Windows XP计算机上运行WPF(.NET 3.5)应用程序超过12小时后,应用程序崩溃,出现两条EventLog错误消息。
第一个是 .NET Runtime版本2.0.50727.3053 - 无法恢复的系统错误。
和第二个 EventType clr20r3,P1 knxclientconsole.exe,P2 1.0.0.0,P3 4e3961fd,P4 windowsbase,P5 3.0.0.0,P6 488f1338,P7 da,P8 1b,P9 fatalerror,P10 NIL。
我的WPF应用程序是我构建的外部DLL模块的用户界面。 该外部模块是通过LAN网络进行通信的通信模块 将UDP套接字与外部设备配合使用。
使用ILDASM查找生成错误的位置后,我在代码中找到了生成错误但不够接近的行。
public bool ON_Seg4
{
get
{
return _ON_Seg4;
}
set
{
if (_ON_Seg4 != value)
{
_ON_Seg4 = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("ON_Seg4"));
}
}
}
}
行 PropertyChanged(这是一个新的PropertyChangedEventArgs(“ON_Seg4”));
您可以看到在属性ON_Seg4的设置器中引发了异常。
使用IL8ASM使用P8参数(IL偏移量)我发现异常是从偏移量1b中提出的:
// 000151:if(PropertyChanged!= null) IL_0016:/ * 02 | * / ldarg.0
IL_0017:/ * 7B | (04)00007C * / ldfld类[System / 23000002 /]System.ComponentModel.PropertyChangedEventHandler/01000013/ KNXClientConsole.Controls.Displays.SevenSegment / 02000010 / :: PropertyChanged / * 0400007C * /
IL_001c:/ * 14 | * / ldnull
IL_001d:/ * FE01 | * / ceq
IL_001f:/ * 0A | * / stloc.0
IL_0020:/ * 06 | * / ldloc.0
IL_0021:/ * 2D | 19 * / brtrue.s IL_003c
如果你看这一行,你会发现没有带偏移量1b的详细代码位置。 1b偏移量是PropertyChanged处理程序的最后一个字节。 我找不到OFFSET 1b。问题的原因在哪里或哪个更好?
IL_0017:/ * 7B | (04)00007C * / ldfld类[System / 23000002 /]System.ComponentModel.PropertyChangedEventHandler/01000013/ KNXClientConsole.Controls.Displays.SevenSegment / 02000010 / :: PropertyChanged / * 0400007C * /
错误是 fatalerror ,所以我没有足够的解释。
故事中有趣的部分是我有7个相似的属性(ON_Seg0 ... ON_Seg6),它们具有相同的代码,只有在ON_Seg4中才会发生异常。
这些属性用于模拟7段指示器的ON / OFF状态。这些属性绑定到XAML grafic对象。
XAML部分:
这是完整的故事,所以如果某人有某种解决方案或提示,请帮助我。