На машине 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 хорошо работает код.
Править: Выпущенный значок не работал в Windows XP вообще, добавление, что 256 цветных версий, кажется, зафиксировали его.
Судя по всему, проблема заключается в неправильной утилизации объектов. Трудно определить, где именно возникает проблема в вашем случае, но в качестве общего правила убедитесь, что вы применяете директиву 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! }
Надеюсь это поможет, С наилучшими пожеланиями, Том.