resources.GetObject ("$ this.Icon") вылетает приложение в Windows XP - PullRequest
0 голосов
/ 30 января 2012

Я сделал эту программу, которая отлично работает в Windows 7, но, похоже, она не работает в Windows XP, так как она сразу же вылетела с сообщением «Программа закрылась, Bla Bla Send Error Report» из Windows.После некоторого поиска в Google я нашел решение, чтобы получить список исключений в журнале событий.Вот результат:

Редактировать: новый журнал исключений (с необработанным фильтром исключений)

Исключение: Het doel van een aanroep heeft een uitzonderingveroorzaakt. bij System.RuntimeMethodHandle._SerializationInvoke (Цель объекта, SignatureStruct & declaringTypeSig, информация о SerializationInfo, контекст StreamingContext)SerializationInvoke (цель объекта, информация SerializationInfo, контекст StreamingContext) bij System.Runtime.Serialization.ObjectManager.CompleteISerializableObject (объект obj, информация SerializationInfo, контекст StreamingContext) bij System.Runtime.Serialization.ObjectManager.FuntimeBol.Serialization.ObjectManager.DoFixups ()
bij System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(Обработчик HeaderHandler, __BinaryParser serParser, логический fCheck, логический isCrossAppDomain, IMethodCallMessage methodCallMessage) bij System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (поток, сериализация, потоковый метод.ResourceReader.DeserializeObject (Int32 typeIndex)
bij System.Resources.ResourceReader.LoadObjectV2 (Int32 pos, ResourceTypeCode & typeCode) bij System.Resources.ResourceReader.Строковый ключ, Boolean ignoreCase, Boolean isString) bij System.Resources.RuntimeResourceSet.GetObject (Строковый ключ, Boolean ignoreCase) bij System.Resources.ResourceManager.GetObject (строковое имя, культура CultureInfo, логический объект(Имя строки) 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 ]

1 голос
/ 22 ноября 2013

Windows XP не поддерживает иконки PNG.Создайте не-PNG ico для приложения, и приложение будет работать нормально:).

1 голос
/ 26 марта 2012

Тип значка правильный или нет, есть решение для правильной обработки:

  • поместите иконки в файл ресурсов сборки (если вы этого не сделали)
  • получить доступ к значку, как это:

    this.Icon = global::AEM.UI.Properties.Resources.your_icon_name;
    
0 голосов
/ 09 января 2014

У меня были точно такие же симптомы на Win7 (с образом ICO), и я нашел обходной путь: добавьте небольшую задержку перед InitializeComponent(), чтобы дать приложению время для загрузки ресурсов.

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

    InitializeComponent();
}

В моем случае это не было вызвано форматом изображения, потому что он работал нормально с этим изображением в течение месяцев разработки. Это действительно было вызвано загрузчиком ресурсов.

...