アプリケーションは空の C# プロジェクトから開始され、出力タイプは「Windows アプリ」に設定されています。
using System.Windows.Forms;
static class Program
{
static System.Windows.Forms.NotifyIcon notifyIcon;
static System.Drawing.Icon LockedIcon = Properties.Resources.icon_locked;
[STAThread]
Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
notifyIcon = new NotifyIcon()
{
Icon = LockedIcon,
ContextMenu = ContextualMenu(),
Visible = true
};
Application.Run()
}
}
システムトレイアイコンコントロールがないWinForms
ため、ベースとして使用しています。WPF
ただし、他のすべてのウィンドウはWPF
. 私は次のように実行しています:
static void ShowUI()
{
MainUI wnd = new MainUI(); //MainUI is a System.Windows.Window (WPF)
wnd.Show();
}
への参照がありWindowsFormsIntegration
ます。WPF
ウィンドウは正しく表示され、すべてが機能しているようです。しかし:
public MainUI()
{
this.Loaded += (o,e) => this.Icon = Properties.Resources.myIcon.ToImageSource();
InitializeComponent();
}
public static System.Windows.Media.ImageSource ToImageSource(this System.Drawing.Icon i)
{
System.Windows.Media.ImageSource imgsrc;
using (System.IO.MemoryStream iconStream = new System.IO.MemoryStream())
{
i.Save(iconStream);
iconStream.Seek(0, System.IO.SeekOrigin.Begin);
imgsrc = System.Windows.Media.Imaging.BitmapFrame.Create(iconStream);
}
return imgsrc;
}
... をスローしSystem.ObjectDisposedException
ます。ToImageSource()
純粋なプロジェクトの場合、拡張メソッドは正常に機能しWPF
ましたが、コンテキストに切り替えてから、WinForms
機能しなくなり、その例外がスローされます。
ワンライナーをいくつかのステップに分割してデバッグを試みました。
System.Drawing.Icon icon = Properties.Resources.myIcon; //works
ImageSource imgsrc = icon.ToImageSource(); //works
wnd.Icon = imgsrc; //System.ObjectDisposedException
何が起こっているのかわからない。実際に実行しないことの副作用WPF
Application.Run()
ですか?