Ho un marshalling IntPtr su un limite non gestito/gestito che corrisponde a un'icona Handle. Convertirlo in un'icona è banale tramite il metodo FromHandle(), e questo è stato soddisfacente fino a poco tempo fa.Converti System.Drawing.Icon in System.Media.ImageSource
Fondamentalmente, ho abbastanza stranezze di thread in corso ora che il ballo MTA/STA che ho suonato per mantenere un WinForm ospitato dalla rottura dell'interfaccia utente principale (WPF-tastic) dell'applicazione è troppo fragile da attaccare con. Quindi il WinForm deve andare.
Quindi, come posso ottenere una versione ImageSource di un'icona?
Nota, ho provato ImageSourceConverter senza alcun risultato.
Per inciso, posso ottenere la risorsa di fondo per qualche ma non tutte le icone coinvolti e in genere esistere al di fuori del montaggio della mia domanda (in realtà, spesso esistono in non gestito dll).
Dopo aver eseguito questa conversione, è necessario utilizzare la chiamata DeleteObject (IntPtr hObject) in gdi32.dll su hBitmap per evitare perdite di memoria. – Alex
Anche la soluzione aggiornata potrebbe causare il problema "Il parametro non è valido" http://blog.lavablast.com/post/2007/11/The-Mysterious-Parameter-Is-Not-Valid-Exception.aspx in alcuni determinati situazioni, avrei bisogno di indagare di più però. Potrebbe essere più sicuro usare la soluzione di Darren invece –
Ho guardato in giro per Internet negli sforzi per ottenere una risposta a questa soluzione. La maggior parte consiglia di utilizzare "Risorsa" anziché "Risorsa incorporata" al loro progetto. Il problema è che se non si desidera distribuire e nascondere le informazioni raccolte all'interno del progetto, è necessario incorporarle. Ciò che è stato interessante notare è stato il della risorsa restituita. Ad esempio, in WPF, per impostare un'icona nella finestra è necessario un tipo . L'accesso a "Properties.Resource. " ha un tipo GDI nativo e dovrà essere convertito in Windows.Media. –
Latency