5 Stimmen

System.Drawing.Icon Konstruktor wirft die Ausnahme "Vorgang erfolgreich abgeschlossen"

Auf einem Windows XP-Computer wirft der folgende Code eine System.ComponentModel.Win32Exception mit der Meldung "Der Vorgang wurde erfolgreich abgeschlossen"

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

Ich kann verhindern, dass das Programm abstürzt, indem ich Folgendes tue

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

aber natürlich ist das Symbol dann nicht gesetzt.

Der vollständige Stack-Trace ist

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

Die Zeile 50 ist die ursprüngliche Zeile, die ich gepostet habe.

Dies ist eine WPF-App, und auf einem Windows 7-Computer funktioniert der Code einwandfrei.

EDIT: Es stellte sich heraus, dass das Symbol auf Windows XP überhaupt nicht funktionierte. Das Hinzufügen von Versionen mit 256 Farben hat das Problem zu lösen scheint.

1voto

James Punkte 77534

Vom Aussehen her scheint das Problem ein Problem damit zu sein, dass Objekte nicht ordnungsgemäß entsorgt werden. Es ist schwer genau festzustellen, wo das Problem in Ihrem Fall auftritt, aber als Faustregel stellen Sie sicher, dass Sie die using-Direktive implementieren, wenn Sie mit Objekten arbeiten, die IDisposable implementieren.

Auch im Beispiel, das Sie bereitgestellt haben, versuchen Sie etwas wie:

using (var icon = new System.Drawing.Icon("icon.ico"))
{
    // Icon verwenden
}
// Icon wird dann entsorgt.

Lesen Sie diesen Artikel.

1voto

t0mm13b Punkte 33393

Befindet sich die Datei icon1.ico im selben Verzeichnis wie die .NET-Exe-Datei? Sie haben es nicht explizit gesagt...lesen Sie dies als externe Icon-Datei? Vielleicht das

string sPath2Icon = Path.Combine(Environment.CurrentDirectory, "icon1.ico");
using (System.Drawing.Icon icon = new System.Drawing.Icon(sPath2Icon)){
    // Tun Sie, was Sie mit dem Icon tun müssen!
}

Hoffe, das hilft, Mit freundlichen Grüßen, Tom.

1voto

Itay k Punkte 3553

Ich hatte ein ähnliches Problem. In meinem Fall war die Icon-Datei eine Multi-Icon-Datei, die Icons der Größe 32x32, 48x48 und 256x256 enthielt. Ich habe sie in eine einzelne Icon-Datei der Größe 32x32 geändert und danach hat es einwandfrei funktioniert.

1voto

jonnystoten Punkte 6715

Es stellte sich heraus, dass das Symbol unter Windows XP überhaupt nicht funktionierte. Das Hinzufügen von Versionen mit 256 Farben scheint das Problem behoben zu haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X