Система.Рисование.Конструктор значков выбрасывает исключение "операция завершена успешно"
На машине с Windows XP следующий код создает систему.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 код работает нормально.
EDIT: оказалось, что значок не работает в Windows XP вообще, добавление 256 цветных версий, кажется, исправило это.
4 ответов:
Судя по всему, проблема заключается в том, чтобы не распоряжаться объектами должным образом. Трудно точно определить, где именно возникает проблема в вашем случае, но в качестве общего эмпирического правила убедитесь, что вы реализуете Директиву
usingпри работе с объектами, которые реализуютIDisposable.Даже в приведенном примере попробуйте сделать что-то вроде:
using (var icon = new System.Drawing.Icon("icon.ico")) { // use icon } // icon is then disposed.Прочтите эту статью.
Существует ли файл
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! }Надеюсь, это поможет, С уважением, Том.
Оказалось, что значок не работал в Windows XP вообще, добавление 256 цветовых версий, кажется, исправило это.
У меня была похожая проблема. в моем случае файл значков был мультииконом, содержащим значки размером 32x32, 48x48 и 256x256. Я изменил его на файл с одним значком размером 32x32, и после этого он работал нормально.
Comments