5

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アプリであり、Windows7マシンではコードは正常に機能します。

編集:アイコンがWindows XPでまったく機能していなかったことが判明し、256色のバージョンを追加すると修正されたようです。

4

4 に答える 4

1

アイコンがWindowsXPでまったく機能していなかったことが判明し、256色のバージョンを追加することで修正されたようです。

于 2011-07-28T21:17:52.567 に答える
1

見た目からすると、問題はオブジェクトを適切に処理しないことの問題のようです。ケースの問題が発生している場所を正確に特定することは困難ですが、一般的な経験則として、を実装usingするオブジェクトを処理するときは、必ずディレクティブを実装してくださいIDisposable

提供したサンプルでも、次のようなことを試してください。

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

この記事を読んでください。

于 2010-03-01T15:12:28.580 に答える
1

ファイルicon1.icoは.NET実行可能ファイルと同じディレクトリにありますか?あなたは明示的に言っていませんでした...あなたはこれを外部アイコンファイルとして読んでいますか?おそらくこれ

文字列sPath2Icon=Path.Combine(Environment.CurrentDirectory、 "icon1.ico");
using(System.Drawing.Icon icon = new System.Drawing.Icon(sPath2Icon)){
    //アイコンでやらなければならないことをしなさい!
}

これがお役に立てば幸いです、よろしく、トム。

于 2010-03-01T15:40:01.473 に答える
1

私も同様の問題を抱えていました。私の場合、アイコンファイルは32x32、48x48、256x256サイズのアイコンを含むマルチアイコンファイルでした。32x32の単一アイコンファイルサイズに変更しましたが、その後は正常に機能しました。

于 2011-04-03T11:33:35.803 に答える