resources.GetObject(“$ this.Icon”)在Windows XP上崩溃了应用程序

时间:2012-01-29 20:21:45

标签: c# exception resources windows-xp

我已经使这个程序在Windows 7中正常运行,但它似乎无法在Windows XP中运行,因为它立即崩溃了程序已经关闭了bla bla发送错误报告'来自Windows的消息。 经过一些谷歌搜索后,我找到了一个解决方案,让自己成为事件日志中的例外日志。 这是结果:

编辑:新的异常日志(使用未处理的异常过滤器)

  

例外:Het doel van een aanroep heeft een uitzondering veroorzaakt。   bij System.RuntimeMethodHandle._SerializationInvoke(Object target,   SignatureStruct&安培; declaringTypeSig,SerializationInfo info,   StreamingContext context)bij   System.RuntimeMethodHandle.SerializationInvoke(Object target,   SignatureStruct declaringTypeSig,SerializationInfo info,   StreamingContext context)bij   System.Reflection.RuntimeConstructorInfo.SerializationInvoke(对象   target,SerializationInfo info,StreamingContext context)bij   System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(对象   obj,SerializationInfo info,StreamingContext context)bij   System.Runtime.Serialization.ObjectManager.FixupSpecialObject(的ObjectHolder   持有者)bij System.Runtime.Serialization.ObjectManager.DoFixups()
  BIJ   System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler   handler,__BinaryParser serParser,Boolean fCheck,Boolean   isCrossAppDomain,IMethodCallMessage methodCallMessage)bij   System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(流   serializationStream,HeaderHandler handler,Boolean fCheck,Boolean   isCrossAppDomain,IMethodCallMessage methodCallMessage)bij   System.Resources.ResourceReader.DeserializeObject(Int32 typeIndex)
  bij System.Resources.ResourceReader.LoadObjectV2(Int32 pos,   ResourceTypeCode&安培; typeCode)bij   System.Resources.ResourceReader.LoadObject(Int32 pos,   ResourceTypeCode&安培; typeCode)bij   System.Resources.RuntimeResourceSet.GetObject(String key,Boolean   ignoreCase,Boolean isString)bij   System.Resources.RuntimeResourceSet.GetObject(String key,Boolean   ignoreCase)bij System.Resources.ResourceManager.GetObject(String   name,CultureInfo culture,Boolean wrapUnmanagedMemStream)bij   System.Resources.ResourceManager.GetObject(String name)bij   STREDIT.frmMain.InitializeComponent()bij STREDIT.frmMain..ctor()
  bij STREDIT.Program.Main()

我找到了坠毁的地方:

this.Controls.Add(this.statusStrip1);
this.Controls.Add(this.menuStrip1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); // Here
this.MainMenuStrip = this.menuStrip1;
this.MinimumSize = new System.Drawing.Size(726, 220);

有谁知道为什么会这样?

提前致谢

3 个答案:

答案 0 :(得分:1)

图标类型是否正确,有一个正确处理它的解决方案:

  • 将图标放入Assembly的资源文件中(如果没有)
  • 访问如下图标:

    this.Icon = global::AEM.UI.Properties.Resources.your_icon_name;
    

答案 1 :(得分:1)

Windows XP不支持PNG图标。为应用程序创建一个非PNG ico,应用程序运行良好:)。

答案 2 :(得分:0)

我在Win7上有完全相同的症状(带有ICO图像),我发现了一种解决方法:在InitializeComponent()之前添加一个小延迟,让时间让应用程序加载资源。

public MyForm()
{
    Thread.Sleep(100); // delay for loading ressources

    InitializeComponent();
}

在我的情况下,不是由图像格式引起的,因为它在开发的几个月中与该图像一起工作正常。它确实是由资源加载器引起的。