Конструктор System.Drawing.Icon выдает исключение «Операция успешно завершена» - PullRequest
5 голосов
/ 01 марта 2010

На компьютере с Windows XP следующий код создает исключение System.ComponentModel.Win32Exception с сообщением «Операция успешно завершена»

System.Drawing.Icon icon = new System.Drawing.Icon("icon.ico");

Я могу остановить сбой программы с помощью

try
{
    System.Drawing.Icon icon = new System.Drawing.Icon("icon.ico");
}
catch(System.ComponentModel.Win32Exception ex)
{
    if (ex.NativeErrorCode != 0)
    {
        throw;
    }
}

но значок, конечно, не установлен.

Полная трассировка стека составляет

at System.Drawing.Icon.Initialize(Int32 width, Int32 height)
at System.Drawing.Icon..ctor(String fileName, Int32 width, Int32 height)
at System.Drawing.Icon..ctor(String fileName)
at hermes.Window1..ctor() in D:\\projects\\hermesclient\\hermesWPF\\hermes\\Window1.xaml.cs:line 50"

Эта строка 50 является исходной строкой, которую я разместил.

Это приложение WPF, и на компьютере с Windows 7 код работает нормально.

РЕДАКТИРОВАТЬ: оказалось, что иконка вообще не работала в Windows XP, добавление 256 цветных версий, похоже, исправило ее.

Ответы [ 4 ]

1 голос
/ 29 июля 2011

Оказалось, что иконка вообще не работала в Windows XP, добавление 256 цветных версий, похоже, исправило ее.

1 голос
/ 01 марта 2010

Файл icon1.ico существует в том же каталоге, что и исполняемый файл .NET? Вы не сказали явно ... вы читаете это как внешний значок файла? возможно это

string sPath2Icon = Path.Combine(Environment.CurrentDirectory, "icon1.ico");
using (System.Drawing.Icon icon = new System.Drawing.Icon(sPath2Icon)){
    // Do what you have to do with icon!
}

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

1 голос
/ 01 марта 2010

Судя по всему, проблема заключается в неправильной утилизации предметов. Трудно точно определить, где именно возникает проблема в вашем случае, но, как правило, убедитесь, что вы реализуете директиву using при работе с объектами, которые реализуют IDisposable.

Даже в предоставленном вами примере попробуйте сделать что-то вроде:

using (var icon = new System.Drawing.Icon("icon.ico"))
{
    // use icon
}
// icon is then disposed.

Прочитайте эту статью .

0 голосов
/ 03 апреля 2011

У меня была похожая проблема. в моем случае файл значков представлял собой файл в несколько цветов, содержащий значки размером 32x32, 48x48 и 256x256. Я изменил его на один значок размером 32x32, и после этого он работал нормально.

...