Code:
Cosa molto importante è la cancellazione dell'oggetto tramite la classe "NativeMethods" altrimenti potreste avere problemi di memoria.
//Convert Bitmap to ImageSource public ImageSource ToImageSource(System.DrawingBitmap source) { BitmapSource bitSrc = null; var hBitmap = source.GetHbitmap(); try { bitSrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); } catch { bitSrc = null; } finally { NativeMethods.DeleteObject(hBitmap); } return bitSrc; } //Class Utility internal static class NativeMethods { [DllImport("gdi32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool DeleteObject(IntPtr hObject); }
void ThreadSecondario(object sender, EventArgs e) { if (this.InvokeRequired) { Invoke(new MethodInvoker(delegate() { ThreadSecondario(sender, e); })); } else { AggiornaValori(sender); } } void AggiornaValori(object sender) { //Aggiornamento valori form }
using System.Windows.Threading; private delegate void AggiornaValoriDelegate(object sender); void ThreadSecondario(object sender, EventArgs e) { Dispatcher.BeginInvoke(DispatcherPriority.Normal, new AggiornaValoriDelegate(AggiornaValori), sender); } void AggiornaValori(object sender) { //Aggiornamento valori controlli WPF }